Shell 脚本显示未找到命令。无视谢邦?

dee*_*392 4 linux shell

看来我的 shebang 被忽略了。当我尝试执行我编写的 shell 脚本时,出现错误:

% ls -alh /usr/sh
-r-xr-xr-x  1 root  1011   139k Sep 16 01:29 sh
% ls -alh foo.sh
-rwxr-xr-x  1 george george    21B Sep 16 00:59 foo.sh
% cat ./foo.sh
#!/usr/sh
echo "lol"
% ./foo.sh
./foo.sh: Command not found.
% sh ./foo.sh
lol
Run Code Online (Sandbox Code Playgroud)

是的,它位于 /usr/sh。我把它放在那里。

sh但正如你所看到的,当我指示执行它时,它工作得很好。是什么赋予了?

我认为不$PATH适用,但在一些试图解决这个问题的搜索结果中,人们提出了这样的要求:

% echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
Run Code Online (Sandbox Code Playgroud)

dee*_*392 5

造成这种情况的原因可能是以下几个原因之一。列出最常见的:

  1. 该文件没有可执行权限。用于chmod a+x foo.sh授予所有用户执行权限。
  2. 您的 shebang 不正确,请仔细检查路径。使用which sh并复制结果#!
  3. 您的行是用 DOS 提要分隔的。脚本需要用 分隔\n。诸如此类的文本编辑器nano允许您通过选择Write-out然后按下Alt+D以关闭 DOS 格式来进行转换。诸如此类的实用程序dos2unix可以直接在命令行上转换文件(尽管可能需要先安装)。