我想用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
echo: bad interpreter: No such file or directory
的错误很可能来自于第一行的 #!...
,被称为shebang行。
#!...
行这行提示shell使用哪个解释器来运行文件,可以是例如bash
或者sh
(它是(粗略地)一个子集,因此许多功能将无法工作),或者基本上任何可以执行文件内容的语言-Perl、Python、Ruby、Groovy等等。
当调用脚本直接执行时,该行会指向系统:
./myScript.sh
这也经常被编辑器用来识别没有后缀名的文件的正确语法高亮显示-例如,Gedit就是这样做的。
要覆盖该行,请将脚本作为参数传递给Bash:
bash myScript.sh
或者,您可以“源”它,这意味着在Bash shell中执行以下任一命令:
source myScript.sh
. myScript.sh
这将大致起到您自己粘贴命令的作用。
#!/usr/bin/env bash
的东西。基本点仍然存在;source
做的事情与在单独进程中运行脚本不同,并且除非你已经检查过脚本以确保在源化时它能正确工作,否则是不安全的。 - tripleee最好这样做:
#!/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
"$dir"/*
可以缩写为 ./*
或者只是 *
,因为变量包含当前工作目录。 - Ansgar Wiechers#!bin/bash
#!/bin/bash
在我的情况下,bash脚本是在Windows PC上创建的,它在每个换行符前面添加了一个回车符。即\x0D\x0A而不只是\x0A。我使用sed
将所有的CRLF替换为LF,现在我的脚本可以正常工作。
sed -i 's//\r/\n//\n/g' /path/to/file.sh
set fileformat=unix
就是另一个答案。 - pingsoli当文件不是Unix格式时,也可能出现此问题...尝试对文件运行dos2unix,然后再试一次。
#!/bin/bash
即可。command
whereis bash
你可以复制bash路径到看到“bad-interpreter”错误的路径。
这是一个奇怪的错误。建议尝试找到错误的来源。
其中一件事是检查pwd命令。
type pwd
确保它是 /usr/bin/pwd 或 /bin/pwd,并验证它不是一个脚本:
file /usr/bin/pwd
If it is a script, I bet it starts with
#!echo
pwd
是 Bash 内置命令:type -a pwd
- glenn jackman#!/path
行中路径不正确时的exec出现的。 - ash
ls
。改用通配符:for file in *; do ...
- Ansgar Wiechers