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.

yosefrow
quelle
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.

Michael Homer
quelle
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"