如何在使用shebang的osascript脚本中返回自定义退出状态码?
在macOS的AppleScript命令行脚本中返回自定义退出码
直接用AppleScript自带的error或return语句做不到返回非0/1的自定义退出码——error不管带什么数字参数,shell退出状态始终是1;return只会输出内容到stdout,退出状态固定为0。但有个直接的解决方法:借助AppleScriptObjC调用系统底层函数。
实现方法(推荐)
用AppleScriptObjC调用C标准库的exit()函数,直接设置当前osascript进程的退出码。脚本示例:
#!/usr/bin/osascript use framework "Foundation" use scripting additions -- 把42换成你需要的自定义退出码 current application's exit(42)
运行这个脚本后,执行echo $?就能看到自定义的退出码(比如上面的42)。注意use framework "Foundation"必须放在脚本最开头,这个特性从OS X 10.6开始就支持,绝大多数macOS版本都能用。
为什么其他方法不行?
error语句:osascript进程在捕获到error时,会强制把自身退出码设为1,不管你在error里指定的数字是什么,这是程序的硬编码逻辑。return语句:仅负责向stdout输出内容,完全不影响进程的退出状态,始终是0。
内容的提问来源于stack exchange,提问作者mhucka
相关产品推荐
相关产品推荐

