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.