【发布时间】:2014-09-19 17:49:40
【问题描述】:
我正在尝试在 shell 中实现一个可以在 shebang 行中使用的脚本解释器。例如,这是我的解释器和使用该解释器的测试脚本:
-----
$ cat interp
#! /usr/bin/env bash
printf "interp called with args: %s\n" "$*"
-----
$ cat test
#! ./interp
printf "test script!\n"
当我在 Linux 系统上运行 ./test 时,interp 会使用我期望的参数调用:
$ ./test -a
interp called with args: ./test -a
但是当我在 Mac OS X 10.8.4 上执行相同操作时,我得到以下结果:
$ ./test -a
test script!
test 脚本的内容由 bash 执行,而不是interp 脚本以test 文件作为第一个参数执行。
我这样做是否正确,这样的事情根本无法在 Mac OS X 上运行?或者有没有更好的方法来做到这一点?
【问题讨论】:
-
在 OSX 10.6.8 上可以与 zsh 一起正常工作,但不能与 macports bash 一起工作。
-
Mac OS X 要求 shebang 中命名的程序是二进制可执行文件,而不是脚本,AFAICR。解决方法 anubhava 建议运行
/usr/bin/env(二进制可执行文件)并请求它运行您的脚本。