为什么#!/ usr / bin / env bash在我的系统上不起作用?


11

在运行一些他们抱怨的安装脚本时,我遇到了一些问题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版。


1
通常这是由于行上回车/换行的结尾。或者:env的位置
Thomas Dickey

Answers:


7

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设置,因此您必须在本地进行修改。尝试找出您所做的事情以及是否可能导致其他类似问题。


这是正确的,/usr/bin已移至另一个文件系统,并且是指向的符号链接/vol_01/usr/bin
conorgriffin16年

-1

这里(Fedora 23)/bin是指向的符号链接/usr/bin。如果您有类似的设置,则符号链接/usr/bin/env仅会为您带来无限循环。

检查相关的软件包,即rpm -qf /usr/bin/env /bin/env,然后重新安装(在此处coreutils,即yum reinstall coreutils类似)。那应该解决任何误导的处理。


我已经重新安装了,coreutils但是没什么区别。这很奇怪。/usr/bin/env是一个符号链接,指向它的target的相对路径../../bin/env。所以那应该/bin/env也存在。因此,我不明白为什么该符号链接不起作用。我替换了目标,因此它指向/bin/env了一条绝对路径,并且似乎起作用了。
conorgriffin

如果/bin/usr/binconorgriffin系统上的符号链接/usr/bin/env/bin/env则将是同一文件。
吉尔(Gilles)'所以别再邪恶了'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.