2017-05-12 3 views
-1

Ich versuche, eine Pipeline aus Benutzereingaben zu erstellen, aber wenn ich die Ausgabe umleiten ich eine Ausgabe ohne Zeilenumbrüche und es ist nur eine große einzelne Zeile. Hier ist der Code:Redirect-Ausgabe von einer Funktion zu einem anderen

42 function stack(){ 
43 echo $(history|tail -1|cut -d" " -f5-|cut -d "|" -f1) >> ~/commands 
44 local last=$(tail -1 ~/commands) 
45 echo $(eval $last) >> ~/output 
46 } 

Gibt es eine bessere Möglichkeit, die Ausgabe von diesem in eine Datei zu leiten? Echo scheint die Ausgabe zu verfälschen.

+0

Warum 'echo $ (eval $ letzte)' laufen? Warum nicht einfach 'eval $ last '? –

Antwort

0

Ich bin nicht sicher, ob den Zweck des Schnittes zu verstehen, aber Zitat fehlt um $() so die Ausgabe in Worte mit IFS aufgeteilt

echo "$(eval "$last")" 

vielleicht cut -c8- ist sicherer als cut -d" " -f5- für Historieneinträge mit einer Reihe mit einer von 3 verschiedenen Anzahl von Ziffern.

auch cut -d"|" -f1 kann fehlschlagen, wenn | als Literal verwendet wird, z. B. echo '|'.

Vielleicht können Sie bei Even designators in bash Handbuch aussehen: in der interaktiven Bash Folgenden wird der letzte Befehl

$ !-1 
+0

Der Befehl '! -1' funktioniert nur, wenn -H shopt gesetzt ist. – hmedia1

+0

kann es nur in der interaktiven Bash funktionieren und kann nicht in Funktionen verwendet werden, da die Erweiterung bei der Funktionsdefinition auftritt –

Verwandte Themen