2016-03-21 10 views
0

Wie rufe ich das Echo innerhalb einer Bash-Subshell auf? Dies ist das Verhalten Ich möchte:Echo innerhalb der Bash-Subshell

# w=5 
# echo $w > /tmp/x 
# cat /tmp/x 
5 

Aber:

# cmd="echo $w > /tmp/x" 
# $cmd 
5 > /tmp/x 

Und:

# $($cmd) 
bash: 5: command not found 

Antwort

4

Ihr Problem ist nicht echo.

Ihr Problem ist die Umleitung. Sie können keine Umleitung in eine Zeichenfolge einfügen.

Deshalb erhalten Sie echo Ausgabe 5 > /tmp/x in Ihrem ersten Versuch.

Das Problem mit Ihrem zweiten Versuch ist, dass Sie „verlieren“ die echo durch die Zeit, die $() versucht, den Ausgang (weil, wie der erste Versuch zeigt die Ausgabe von $cmd ist 5 > /tmp/x das ist kein gültiger Befehl auszuführen.

das heißt dies Bash FAQ 050 setzen Befehle in Variablen versucht, so stoppen. es ist nicht.

+0

ich war für den Link auf wooledge.org suchen, bis ich, dass Sie alle es fertig geschrieben :-) – andlrc

+0

Ok realisiert funktioniert , Danke für die Rückmeldung. Übrigens scheint das so zu funktionieren: 'echo $ cmd | bash' –

+0

@SamirNagheenanajar Nein, das funktioniert nicht. Es klappt". Manchmal. Für einige Eingaben. In manchen Fällen. Und ist * immer noch * eine gefährliche und schlechte Idee. Ernsthaft, mach sowas nicht, wenn du es möglicherweise vermeiden kannst. –