Jaka jest zaleta używania bash -c nad ciągiem tutaj?


11

Czy jest jakaś realna korzyść z używania bash -c 'some command'ponad używaniebash <<< 'some command'

Wydaje się, że osiągają ten sam efekt.



Cześć @Patrick dzięki za powiadomienie. Naprawdę nie byłem pewien, gdzie jest najlepsze miejsce do publikowania. Ponieważ z jednej strony jest to pytanie o Linuksa, ale z drugiej strony bash jest rodzajem języka skryptowego, a druga strona ma więcej odwiedzających. W takim przypadku, gdzie bardziej odpowiednie miejsce byłoby zamieścić?
yosefrow

4
@yosefrow: Każda strona byłaby w porządku IMHO; ale crosssposting jest wstrętny (prosisz ludzi w obu witrynach o poświęcenie czasu na twoje pytanie, bez dawania im wzajemnych korzyści).
ruakh

Czy w takim razie post należałoby usunąć z jednej z witryn?
yosefrow

2
Inną niewielką różnicą jest to, że bash -c '...'będzie działać w skorupach, które nie mają znaków Zakładasz, że bash zostanie wywołany w powłoce bash, ale nie zawsze tak będzie.
Joel Cornett

Odpowiedzi:


21

bash -c 'some command'zachowuje dostęp do standardowego wejścia osoby dzwoniącej, więc readpolecenia odczytywane ze standardowego wejścia będą działać normalnie. bash <<< 'some command'zastępuje wejściowy z linii były przekazywane w, więc bash -c cati bash <<< catrobić różne rzeczy.

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

Z drugiej strony możesz skorzystać z tej funkcji, aby zapewnić własne standardowe dane wejściowe do wykorzystania $'...', jeśli jesteś bardzo ostrożny:

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

Nie chciałbym na tym polegać, ale czasami może być to wygodne.


bash -cumożliwia także przekazywanie argumentów do skryptu i $0ustawianie:

bash -c 'some command' sh abc def

ustawi $1się abci $2do defwewnątrz some command.


3
Błędy składniowe powodują również nieco inne sformułowanie. Głównie o tym bash -cwspominają -cAFAIK. Nie do końca bezcelowe, ponieważ może to pomóc w ich wyśledzeniu. bash <<< 'script'błędy wyglądają jak te w skrypcie nadrzędnym; bash -c 'script'te nie. Można nawet opisać je: bash -c 'script' label.
derobert

Cóż, bash <<< 'echo $1' /dev/stdin footeż działa i drukuje foo. Chociaż ustawienie $0jest nieco bardziej ograniczone.
ilkkachu

bash <<< 'echo "$1"' /dev/stdin foonie zawsze działa. Ja bash <<< 'echo "$1"' -s foodo pracy
G-Man mówi „Przywróć Monikę”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.