Birden çok komutu yürütmek için komut değiştirmeyi kullanma


2

Bash olarak yapmaya çalıştığım şey bir betik yazmak, fooçalıştırdığımda $(foo)dizini değiştirip kullanarak bir betik çalıştırıyor source. İçeriği foo:

echo cd bar
echo "&&"
echo source baz

Çalıştırdığımda $(foo), dizini "bar" olarak değiştiriyor, ancak çalışmıyor source baz. Bunu başarmanın bir yolu var mı?


2
Artı, neden bunu yapmak istiyorsun? Bu biraz kararlı görünüyor ve ihtiyacınız olanı elde etmenin daha iyi yolları olduğuna eminim.
slhck

@slhck Kabuğu bir komut dosyası veya programın içinden etkileyemiyorum. Kabuğu etkilemenin tek yolu komut değiştirmedir ya da source, bunun için bir yol bulmaya çalışıyorum.
Kevin Marsolais

Neden bir değişkende ilk çalıştırılacak komutları saklıyorsunuz?
chepner

Yanıtlar:


2

Çıktıya ihtiyacınız var eval:

eval $(foo)

Aksi taktirde, &&(veya başka bir benzer dil öğesi) tırnak işaretleri içine alınmış gibi ele alınır: düzenli bir argüman cd.

$ echo $(foo)
cd bar && source baz

Liderin atlanması echo, bu cddört argümanla yürütülür bar && source baz, sessizce ilk hariç hepsini bırakır.


Uygulamanıza bağlı olarak, bunun gerçekten iyi bir fikir olmayabilir.
Daniel Beck

En şık çözüm değilse, iş gibi görünüyor. Teşekkürler.
Kevin Marsolais

0

Yapmaya çalıştığınız şeyi yapmak için takma adları kullanabilirsiniz (ayrıca: man bash ).

alias foo='cd bar && source baz'

foo yürütürken dizini bar ve kaynak baz olarak değiştirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.