我有一个可以使用不同解释器运行的脚本:
#!/usr/bin/env default-interpreter
[my script]
Run Code Online (Sandbox Code Playgroud)
但我想使用alternative-interpreter
它,如果它可用,就像这样:
#!/usr/bin/env alternative-interpreter
[my script]
Run Code Online (Sandbox Code Playgroud)
有没有办法创建一个shebang来查找alternative-interpreter
并回退到default-interpreter
第一个不可用的情况?
您能解释一下 shebang #!/bin/sh -x 中“x”的含义吗?
这行有必要加“-x”吗?
在开发 GNU Parallel 时,我似乎遇到了 #! (舍邦)。这个shebang行:
#!/bin/echo 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789done bar
Run Code Online (Sandbox Code Playgroud)
在 Debian、Mandriva、SuSE、Ubuntu、Centos、RedHat 上打印:
123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k12345 ./shebang
Run Code Online (Sandbox Code Playgroud)
所以它似乎在128个字节后被砍掉了。但它在 FreeBSD、DragonFlyBSD 和 Hurd 上完成了我所期望的(打印整行)。在 OpenBSD 和 Tru64 上,它什么也不打印(?!)。
造成这种限制的原因是什么?我可以解决它吗?
背景
GNU Parallel 的 --shebang 使得在 #! 行中编写完整的并行命令成为可能。因此,如果完整命令只能是 128 个字符,则在某种程度上受到限制。
文件的其余部分用作并行的输入,因此不能在那里写入命令。
在 shebang 中使用 sudo 似乎完全被破坏了。下面的代码:
#!/usr/bin/sudo /bin/bash
echo "this should work"
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 上工作正常,但在 OSX 上给我:
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the
'nosuid' option set or an NFS file system without root privileges?
Run Code Online (Sandbox Code Playgroud)
有什么想法如何让它发挥作用吗?
注意: sudo 工作得很好,否则:
/usr/bin/sudo echo "This works"
Password:
This works
Run Code Online (Sandbox Code Playgroud)