Was ist der Vorteil der Verwendung von bash -c gegenüber der Verwendung einer Here-Zeichenfolge?


11

Gibt es einen wirklichen Vorteil gegenüber der Verwendung bash -c 'some command'?bash <<< 'some command'

Sie scheinen den gleichen Effekt zu erzielen.



Hallo @Patrick, danke für den Hinweis. Ich war mir wirklich nicht sicher, wo der beste Ort zum Posten war. Da dies einerseits eine Linux-Frage ist, andererseits Bash eine Art Skriptsprache ist und die andere Site mehr Besucher hat. Wo wäre in einem solchen Fall der geeignetere Ort zum Posten?
— Josefrow

4
@yosefrow: Jede Seite wäre meiner Meinung nach in Ordnung gewesen; Crossposting ist jedoch unangenehm (Sie bitten die Leute auf beiden Websites, Zeit mit Ihrer Frage zu verbringen, ohne ihnen den Vorteil der gegenseitigen Antworten zu geben).
— Ruakh

Wäre es dann angebracht, den Beitrag von einer der Websites zu löschen?
— Josefrow

2
Ein weiterer kleiner Unterschied ist, dass bash -c '...'es in Muscheln funktioniert, die keine Herestrings haben. Sie gehen davon aus, dass Bash innerhalb einer Bash-Shell aufgerufen wird, dies ist jedoch nicht immer der Fall.
— Joel Cornett

Antworten:


21

bash -c 'some command'behält den Zugriff auf die Standardeingabe des Anrufers bei, sodass readBefehle, die von der Standardeingabe gelesen werden, normal funktionieren. bash <<< 'some command'Ersetzt diese Eingabe durch die übergebene Zeile, bash -c catund führt bash <<< catverschiedene Aktionen aus.

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

Auf der anderen Seite können Sie diese Funktion verwenden, um Ihre eigenen Standardeingaben bereitzustellen, die verwendet werden können $'...', wenn Sie sehr vorsichtig sind:

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

Darauf möchte ich mich nicht verlassen, aber manchmal kann es praktisch sein.


bash -cAußerdem können Argumente an das Skript übergeben und $0festgelegt werden:

bash -c 'some command' sh abc def

wird eingestellt , $1um abcund $2nach definnen some command.


3
Syntaxfehler führen auch zu leicht unterschiedlichen Formulierungen. Hauptsächlich das bash -cerwähnen -cAFAIK. Nicht ganz sinnlos, da dies helfen kann, sie aufzuspüren. bash <<< 'script'Fehler sehen genauso aus wie im übergeordneten Skript. bash -c 'script'diejenigen nicht. Sie können sie sogar beschriften : bash -c 'script' label.
— Derobert

Funktioniert bash <<< 'echo $1' /dev/stdin fooauch und druckt foo. Die Einstellung $0ist jedoch etwas eingeschränkter.
— Ilkkachu

bash <<< 'echo "$1"' /dev/stdin foofunktioniert nicht immer. Ich muss bash <<< 'echo "$1"' -s fooarbeiten.
— G-Man sagt "Reinstate Monica"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.