AppleScript:错误"sh:lame:command not found"编号127

Eva*_*n S 6 macos shell applescript

我正在尝试使用以下命令创建AppleScript.我遇到的问题是第三行有错误.我lame直接在终端中使用该命令没有问题.此外,lame它不是原生Mac实用程序; 我自己安装了它.有人有解决方案吗?

do shell script "cd ~/Downloads"

do shell script "say -f ~/Downloads/RE.txt -o ~/Downloads/recording.aiff"

do shell script "lame -m m ~/Downloads/recording.aiff ~/Downloads/recording.mp3"

-- error "sh: lame: command not found" number 127

do shell script "rm recording.aiff RE.txt"
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 9

补充Paul R的有用答案:

需要注意的是do shell script- 令人遗憾的是 - 看不到与$PATH创造的贝壳相同Terminal.app - 一个值得注意的缺席/usr/local/bin.

在我的OS X 10.9.3系统上,运行do shell script "echo $PATH"仅产生:

/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)

有各种方法:

  • 使用 Paul的解决方案中的可执行文件的完整路径.

  • /usr/local/bin$PATH如果你在一个do shell script命令中调用多个可执行文件,那么手动预备/追加(许多非系统可执行文件存在的地方)- 值得考虑; 例如:

do shell script "export PATH=\"/usr/local/bin:$PATH\"
 cd ~/Downloads
 say -f ~/Downloads/RE.txt -o ~/Downloads/recording.aiff
 lame -m m ~/Downloads/recording.aiff ~/Downloads/recording.mp3
 rm recording.aiff RE.txt"
Run Code Online (Sandbox Code Playgroud)

注意如何以上使用单个 do shell script带命令多个在一个命令串-命令可以由换行或分离,如果在同一行,同;.
这比多次调用更有效,但do shell script建议在脚本代码内部和命令周围添加错误处理.

  • 获得$PATH交互式shell看到的内容(除了在bash配置文件中添加的内容之外),您可以调用eval $(/usr/libexec/path_helper -s);命令字符串中的第一个语句.

其他重要考虑因素do shell script:

  • bash调用为sh,导致行为的变化,最值得注意的是:
  • 区域设置设置为通用"C"区域设置而不是系统的区域设置 ; 修复它,手动预先添加export LANG='" & user locale of (system info) & ".UTF-8'到您的命令字符串.
  • 没有读取启动文件(配置文件) ; 这并不奇怪,因为创建的shell是一个非交互式(非登录)shell,但有时通过预先添加. ~/.bash_profile到命令字符串手动加载一个人的配置文件是很方便的; 但请注意,这会降低AppleScript的可移植性.

do shell script命令参考:http://developer.apple.com/library/mac/#technotes/tn2065/_index.html


Pau*_*l R 6

可能是一个PATH问题 - 使用跛足的完整路径,例如

do shell script "/usr/local/bin/lame -m m ~/Downloads/recording.aiff ~/Downloads/recording.mp3"
Run Code Online (Sandbox Code Playgroud)