在运行一些他们抱怨的安装脚本时,我遇到了一些问题bad interpreter
。
因此,我举了一个简单的例子,但我无法弄清楚问题出在哪里,请参阅下文。
#!/usr/bin/env bash
echo "hello"
执行上面的脚本会导致以下错误
[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
该/usr/bin/env
文件存在,请参见下文:
[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16 2014 /bin/env
[root@ech-10-24-130-154 dc-user]#
如果我更改脚本以使用常规的shebang #!/bin/bash
,则不会有问题。#!/bin/env bash
也可以。
环境中缺少什么让便携式Shebang正常工作?
ls -lL /usr/bin/env
返回,ls: cannot access /usr/bin/env: No such file or directory
所以我想我需要更改符号链接?我可以指出/bin/env
吗?
env --version
是8.4,操作系统是Red Hat Enterprise Linux Server 6.6版。
ls -lL /usr/bin/env
显示符号链接已断开。这就解释了为什么shebang行不起作用的原因:内核正在尝试执行悬挂的符号链接,并且显然失败了。
/usr/bin/env -> ../../bin/env
如果/usr
和/usr/bin
都是实际目录(不是符号链接),则是正确的。显然,您的计算机不是这种情况。也许/usr
是符号链接?(显然,它不是的符号链接/
,否则/usr/bin/env
将与相同/bin/env
,而不是符号链接)。
您需要修复该符号链接。您可以将其设为绝对链接:
sudo ln -snf /bin/env /usr/bin/env
您可以将其设为相对链接,但如果这样做,请确保它是正确的。在创建符号链接之前,请切换至/usr/bin
并运行ls -l relative/path/to/bin/env
以确认是否正确。
这不是默认的RHEL设置,因此您必须在本地进行修改。尝试找出您所做的事情以及是否可能导致其他类似问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句