我想通过for循环遍历目录中的文件,但这就出现了.
echo: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
码:
#!/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
Run Code Online (Sandbox Code Playgroud)
更好:
#!/bin/bash
count=0
dir="$PWD"
echo "$dir"
for file in "$dir"/*
do
if [[ -f $file ]]
then
((count++))
fi
done
echo $count
Run Code Online (Sandbox Code Playgroud)
或最简单/最短的解决方案:
#!/bin/bash
echo "$PWD"
for file; do
[[ -f $file ]] && ((count++))
done
echo $count
Run Code Online (Sandbox Code Playgroud)
将echo: bad interpreter: No such file or directory是最有可能从第一行,来#!...这就是所谓家当线。
#!...线路这一行提示 shell 使用什么解释器来运行文件。这可以是例如bash,或者sh(它(大致)是一个子集,所以很多东西都不起作用),或者基本上任何可以执行文件内容的东西——Perl、Python、Ruby、Groovy……
在脚本可执行时直接调用脚本的情况下,该行指向系统:
./myScript.sh
Run Code Online (Sandbox Code Playgroud)
当文件没有后缀时,编辑器也经常使用它来识别正确的语法突出显示 - 例如,Gedit 会这样做。
要覆盖该行,请将脚本作为参数提供给 Bash:
bash myScript.sh
Run Code Online (Sandbox Code Playgroud)
或者,您可以“获取”它,这意味着,从 Bash shell 中,执行以下任一操作
source myScript.sh
. myScript.sh
Run Code Online (Sandbox Code Playgroud)
这将(大致)工作,就像您自己粘贴命令一样。
小智 6
我刚刚遇到同样的问题,发现我的错误在我的第一行,
#!bin/bash
Run Code Online (Sandbox Code Playgroud)
代替
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
就我而言,bash 脚本是在 Windows PC 上创建的,它在每个换行符前面添加了一个回车符。\x0D\x0A 而不仅仅是 \x0A。我用 LF 替换了所有的 CRLF,sed我的脚本现在可以工作了。
sed -i 's//\r/\n//\n/g' /path/to/file.sh
Run Code Online (Sandbox Code Playgroud)