使用 shebang 将 运行 SBCL Common LISP 脚本作为可执行文件发布
Issue using shebang to run SBCL Common LISP script as executable
我一直在尝试使用 SBCL 学习 Common Lisp,但我 运行 在执行我的代码时遇到了问题。使用 sbcl --script exec.lisp
一切正常(无论我是否指定了 shebang 行)但我似乎无法直接使用 shebang 行执行与 ./exec.lisp
相同的文件。虽然我很可能误解了 manual 所做的事情,但根据我的理解,这意味着这应该是可能的。我的 exec.lisp
脚本看起来与示例中的相同(并且它已被授予可执行权限 chmod a+x exec.lisp
)
#!/usr/local/bin/sbcl --script
(write-line "Hello, World!")
但我收到的不是所需的输出:
$ ./exec.lisp
./exec.lisp: line 2: write-line: command not found
我已经确定 sbcl
的路径是正确的)
编辑:我正在使用 mac OS。
我会检查为 sbcl
提供的路径(是否与 which sbcl
的输出匹配?)
我尝试了以下方法(运行 MacOS Mojave 10.14.4,SBCL 版本 1.4.16,使用 nix
而不是 brew
获得,但我怀疑这会有所不同) :
> $ which sbcl
/Users/abrahma/.nix-profile/bin/sbcl
> $ bat test.lisp
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: test.lisp
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ #!/Users/abrahma/.nix-profile/bin/sbcl --script
2 │ (write-line "Hello world from Lisp !")
3 │
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
> $ l
.rwxr-xr-x 88 abrahma 21 May 15:54 test.lisp
> $ ./test.lisp
Hello world from Lisp !
在 MacOS 上遇到同样的问题,更改为:
#!/usr/bin/env sbcl --script
成功了。
在 Arch Linux 上使用 GNU 核心实用程序:
#!/usr/bin/env -S sbcl --script
(write-line "")
我一直在尝试使用 SBCL 学习 Common Lisp,但我 运行 在执行我的代码时遇到了问题。使用 sbcl --script exec.lisp
一切正常(无论我是否指定了 shebang 行)但我似乎无法直接使用 shebang 行执行与 ./exec.lisp
相同的文件。虽然我很可能误解了 manual 所做的事情,但根据我的理解,这意味着这应该是可能的。我的 exec.lisp
脚本看起来与示例中的相同(并且它已被授予可执行权限 chmod a+x exec.lisp
)
#!/usr/local/bin/sbcl --script
(write-line "Hello, World!")
但我收到的不是所需的输出:
$ ./exec.lisp
./exec.lisp: line 2: write-line: command not found
我已经确定 sbcl
的路径是正确的)
编辑:我正在使用 mac OS。
我会检查为 sbcl
提供的路径(是否与 which sbcl
的输出匹配?)
我尝试了以下方法(运行 MacOS Mojave 10.14.4,SBCL 版本 1.4.16,使用 nix
而不是 brew
获得,但我怀疑这会有所不同) :
> $ which sbcl
/Users/abrahma/.nix-profile/bin/sbcl
> $ bat test.lisp
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: test.lisp
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ #!/Users/abrahma/.nix-profile/bin/sbcl --script
2 │ (write-line "Hello world from Lisp !")
3 │
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
> $ l
.rwxr-xr-x 88 abrahma 21 May 15:54 test.lisp
> $ ./test.lisp
Hello world from Lisp !
在 MacOS 上遇到同样的问题,更改为:
#!/usr/bin/env sbcl --script
成功了。
在 Arch Linux 上使用 GNU 核心实用程序:
#!/usr/bin/env -S sbcl --script
(write-line "")