Applescript不执行shell命令

时间:2016-08-25 14:34:04

标签: bash macos applescript echo

我有一个AppleScript

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

但是file.txt不包含" aaa"!

它包含" -n -eaa \ n"代替。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

echo的不同版本在解释命令选项(如-n-e)和/或字符串中的转义序列方面无可救药地不一致。 cdarke说,这不仅仅是bash vs. sh;它比那更麻烦。最好的办法就是使用printf来避免任何一个。它比echo使用起来有点复杂,但完全值得,因为你的脚本不会因为最新版本的shell使用不同的选项(!)编译而中断。

在这种情况下,使用printf实际上甚至比使用echo更简单,因为它总是解释转义序列(在第一个参数中,“格式字符串” - 其余部分不同),并且不会在最后打印换行符(除非您在格式字符串的末尾用\n明确告诉它)。所以你的脚本变成了:

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

...虽然您可以通过使用单引号来进一步简化它,以防止shell在转到printf之前解释转义:

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

(转义仍然加倍,因为它们被AppleScript解释。但至少它们不需要再翻两番了。)

(p。relevant xkcd