Burada dizge kullanmak yerine bash -c kullanmanın avantajı nedir?


11

bash -c 'some command'Aşırı kullanımın gerçek bir faydası var mıbash <<< 'some command'

Aynı etkiye sahip gibi görünüyorlar.



Merhaba @Patrick bildirim için teşekkürler. Gerçekten göndermek için en iyi yer nerede olduğundan emin değildi. Çünkü bir yandan bu bir Linux sorusu, diğer yandan bash bir tür betik dili ve diğer sitenin daha fazla ziyaretçisi var. Böyle bir durumda, göndermek için daha uygun yer neresi olur?
yosefrow

4
@yosefrow: Her iki site de IMHO olurdu; ancak crossposting iğrençtir (her iki sitedeki insanlardan, birbirlerinin cevaplarından faydalanmadan, sorunuza zaman ayırmalarını istersiniz).
ruakh

Daha sonra postayı sitelerden birinden silmek uygun olur mu?
yosefrow

2
Başka bir küçük fark, bash -c '...'herestring olmayan kabuklarda çalışacak olmasıdır. Bash'in bir bash kabuğu içinde çağrıldığını varsayıyorsunuz, ancak bu her zaman böyle olmayacaktır.
Joel Cornett

Yanıtlar:


21

bash -c 'some command'arayanın standart girişine erişimi korur, bu nedenle readstandart girişten okunan komutlar normal şekilde çalışır. bash <<< 'some command'çizgi ile giriş geçirilen, böylece varlık olduğunu cümledeki bash -c catve bash <<< catfarklı şeyler yapmak.

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

Öte yandan, $'...'çok dikkatli iseniz, kullanılacak standart girişinizi sağlamak için bu özellikten yararlanabilirsiniz :

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

Buna güvenmek istemem, ama bazen uygun olabilir.


bash -cayrıca argümanların komut dosyasına geçirilmesine ve $0ayarlanmasına da izin verir :

bash -c 'some command' sh abc def

ayarlayacaktır $1için abcve $2karşı defiçten some command.


3
Sözdizimi hataları da biraz farklı ifadeler üretecektir. Temelde bundan bash -cbahsedenler -cAFAIK. Tamamen anlamsız değil, çünkü bu onları izlemeye yardımcı olabilir. bash <<< 'script'hatalar tıpkı üst komut dosyasındaki gibi görünür; bash -c 'script'olanlar değil. Hatta bunları etiketleyebilirsiniz: bash -c 'script' label.
derobert

Eh, bash <<< 'echo $1' /dev/stdin fooçalışıyor ve yazdırıyor foo. Rağmen ayar $0biraz daha sınırlıdır.
ilkkachu

bash <<< 'echo "$1"' /dev/stdin fooher zaman çalışmaz. Bende bash <<< 'echo "$1"' -s fooişe.
G-Man 'Monica'yı Yeniden Başlat'
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.