2016-08-25 18 views
0

Ich habe einen AppleApplescript nicht ausgeführt Shell-Befehl

do shell script "echo -n -e \\\\x61\\\\x61\\\\x61 > /tmp/file.txt" 

Aber die datei.txt nicht enthält „aaa“!

Es enthält stattdessen "-n -e aaa \ n".

Kann mir jemand bei diesem Problem helfen?

+1

' sh' echo unterstützt keine Optionen -n oder -e, sie sind eine Bash-Erweiterung. Versuchen Sie, den Befehl mit 'bash -c' – cdarke

+0

voranzutreiben. Oder sehen Sie, ob Ihr System 'printf' unterstützt. Viel Glück. – shellter

Antwort

1

Verschiedene Versionen von echo sind hoffnungslos inkonsistent in der Interpretation von Befehlsoptionen (wie -n und -e) und/oder Escape-Sequenzen in der Zeichenfolge. Es ist nicht nur Bash vs. Sh, wie cdarke sagte; es ist viel unordentlicher als das. Das Beste, was zu tun ist, vermeiden Sie einfach einen, indem Sie stattdessen printf verwenden. Es ist ein bisschen komplizierter zu verwenden als echo, aber es lohnt sich, weil Ihre Skripte nicht brechen, nur weil die neueste Version der Shell mit verschiedenen Optionen (!) Kompiliert wurde.

In diesem Fall ist die Verwendung von printf eigentlich noch einfacher als die Verwendung echo, weil es immer Escape-Sequenzen interpretiert (in seinem ersten Argument die "Formatzeichenfolge" - der Rest ist anders), und druckt keine Zeilenschaltung am Ende (es sei denn, Sie sagen es explizit mit \n am Ende der Formatzeichenfolge). So Ihr Skript wird:

do shell script "printf \\\\x61\\\\x61\\\\x61 > /tmp/file.txt" 

... obwohl Sie es weiter durch die Verwendung Apostrophe vereinfachen können die Schale, um zu verhindern Fluchten zu interpretieren, bevor sie zu printf erhalten:

do shell script "printf '\\x61\\x61\\x61' > /tmp/file.txt" 

(Die Fluchten sind noch verdoppelt, weil sie von Apple sind interpretiert. Aber zumindest müssen sie mehr vervierfacht nicht werden.)

(ps relevant xkcd)