shell脚本:错误的解释器:使用pwd时没有这样的文件或目录

时间:2013-03-31 22:59:04

标签: bash unix pwd

我想查看带有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

11 个答案:

答案 0 :(得分:20)

我遇到了同样的问题。删除#!/bin/bash为我做了诀窍。似乎没有必要添加bash所在的位置,因为它位于系统路径上。

我找到了另一个解决方案here。变化

#!/bin/bash

#!/usr/bin/bash

答案 1 :(得分:6)

更好:

#!/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

答案 2 :(得分:2)

在我的情况下,bash脚本是在Windows PC上创建的,它在每个换行符前添加了一个回车符。 \ x0D \ x0A而不仅仅是\ x0A。我使用sed只用LF替换了所有CRLF,我的脚本现在可以正常工作。

sed -i 's//\r/\n//\n/g' /path/to/file.sh

答案 3 :(得分:2)

child很可能来自第一行echo: bad interpreter: No such file or directory,称为shebang line

关于#!...

这一行提示shell用于运行文件的解释器。那可以是例如#!...,或bash((大致)是一个子集,因此很多东西都不起作用),或者基本上任何可以执行文件内容的东西 - Perl,Python,Ruby,Groovy ..

该行指向系统,例如在可执行文件时直接调用脚本:

sh

当文件没有后缀时,编辑人员经常使用它来识别正确的语法高亮 - 例如,Gedit就是这样做。

解决方案

要覆盖该行,请将脚本作为参数提供给Bash:

./myScript.sh

或者,您可以“来源”它,这意味着,在Bash shell中,执行

之一
bash myScript.sh

(大致)就像你自己粘贴命令一样。

答案 4 :(得分:1)

这是一个奇怪的错误。我建议尝试找到错误的来源。

有一件事是检查pwd命令。

type pwd

确保它是/ usr / bin / pwd或/ bin / pwd,并验证它不是脚本:

file /usr/bin/pwd

如果是脚本,我打赌它以

开头
#!echo

答案 5 :(得分:1)

如果您确实使用Homebrew安装BASH,

删除 #!/bin/bash 就够了。

答案 6 :(得分:1)

我刚遇到相同的问题,发现我的错误出在我的第一行,有

#!bin/bash

代替

#!/bin/bash

答案 7 :(得分:0)

您可以使用命令

找到bash所在的位置
whereis bash

并且您可以将bash路径复制到您看到错误解释器错误的路径。

答案 8 :(得分:0)

我已按照以下链接进行操作,问题已得到解决。

引用链接:script error - bad interpreter 实际上,每行末尾都有一个额外的 ^ M 符号。因此,将其删除后,对我来说效果很好。

希望有帮助!

答案 9 :(得分:0)

当文件不是unix格式时,也可能会发生此问题。尝试运行dos2unix重新设置文件,然后重试。

答案 10 :(得分:0)

因此,如果您将用户名组优先级从用户名更改为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错误