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

Ale*_*lek 16 unix bash pwd

我想通过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)

Mar*_*rro 23

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

我发现了另一个解决方案在这里.更改

#!/bin/bash

对于

#!/usr/bin/bash


Gil*_*not 7

更好:

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


Ond*_*žka 7

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)


fah*_*ash 5

就我而言,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)