我想通过 for 循环浏览目录中的文件,但这出现了。
echo: bad interpreter: No such file or directory
代码:
#!/bin/bash
count=0
dir=`pwd`
echo "$dir"
FILES=`ls $dir`
for file in $FILES
do
if [ -f $file ]
then
count=$(($count + 1))
fi
done
echo $count
我有同样的问题。删除#!/bin/bash
对我有用。似乎没有必要添加 bash 所在的位置,因为它位于系统路径上。
我在这里找到了另一个解决方案。改变
#!/bin/bash
为了
#!/usr/bin/bash
更好的做法:
#!/bin/bash
count=0
dir="$PWD"
echo "$dir"
for file in "$dir"/*
do
if [[ -f $file ]]
then
((count++))
fi
done
echo $count
或最简单/最短的解决方案:
#!/bin/bash
echo "$PWD"
for file; do
[[ -f $file ]] && ((count++))
done
echo $count
最echo: bad interpreter: No such file or directory
有可能来自第一行,#!...
称为shebang line。
#!...
线路这一行提示 shell 使用什么解释器来运行文件。这可以是例如bash
,或者sh
(它是(大致)一个子集,所以很多事情都不起作用),或者基本上任何可以执行文件内容的东西——Perl、Python、Ruby、Groovy ......
在脚本可执行时直接调用脚本等情况下,该行指向系统:
./myScript.sh
当文件没有后缀时,编辑器也经常使用它来识别正确的语法突出显示——例如,Gedit 就是这样做的。
要覆盖该行,请将脚本作为参数提供给 Bash:
bash myScript.sh
或者,您可以“获取”它,这意味着,在 Bash shell 中,执行以下任一操作
source myScript.sh
. myScript.sh
这将(大致)起作用,就像您自己粘贴命令一样。
在我的例子中,bash 脚本是在 Windows PC 上创建的,它在每个换行符前添加了一个回车符。\x0D\x0A 而不仅仅是 \x0A。我用 LF 替换了所有的 CRLF,sed
我的脚本现在可以工作了。
sed -i 's//\r/\n//\n/g' /path/to/file.sh
我刚刚遇到同样的问题,发现我的错误在我的第一行,有
#!bin/bash
代替
#!/bin/bash
这是一个奇怪的错误。我建议尝试找到错误的根源。
一件事是检查 pwd 命令。
type pwd
确保它是 /usr/bin/pwd 或 /bin/pwd,并验证它不是脚本:
file /usr/bin/pwd
如果它是一个脚本,我敢打赌它以
#!echo
如果您确实使用 Homebrew 安装 BASH,
删除
#!/bin/bash
意志就足够了。
您可以使用命令找到 bash 所在的位置
whereis bash
您可以将 bash 路径复制到您看到错误解释器错误的路径。
当文件不是 unix 格式时,也可能出现此问题。尝试重新运行 dos2unix 文件并重试。
因此,如果您将用户名组优先级从用户名更改为 root,您应该更改
#!/user/bin/bash
到
#!/bin/bash
检查您的用户组(我的用户名是 rommi)
$ groups rommi
此命令将输出:
rommi : root adm cdrom sudo dip plugdev lxd lpadmin sambashare
由于我的用户名组优先级设置为 root,我应该将我的脚本更改为
#!/bin/bash
我使用以下方法更改优先级组:
sudo usermod -g root rommi
如果groups rommi
命令输出:
rommi : rommi adm cdrom sudo dip plugdev lxd lpadmin sambashare
那么我的脚本应该使用#!/usr/bin/bash
使此更改失败将导致bad interpreter: No such file or directory
错误