web-dev-qa-db-ja.com

シェルスクリプト:不正なインタープリター: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
14
Alek

より良い:

#!/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
6
Gilles Quenot

同じ問題がありました。 #!/bin/bashを削除すると、私にとってはうまくいきました。 bashはシステムパス上にあるため、bashの場所を追加する必要はないようです。

私は別の解決策を見つけました こちら 。変化する

#!/bin/bash

for

#!/usr/bin/bash

21
Marco Navarro

echo: bad interpreter: No such file or directoryは、最初の行から来る可能性が最も高い#!...これは シェバンライン と呼ばれます。

関して #!...

この行は、ファイルの実行に使用するインタープリターをシェルに示します。それは例えばbash、またはsh((おおむね)サブセットなので、多くの機能は動作しません)、または基本的にファイルコンテンツを実行できるもの-Perl、Python、Ruby、Groovy ...

この行は、実行可能なスクリプトを直接呼び出すような場合にシステムを指します。

./myScript.sh

また、ファイルに接尾辞が付いていないときに正しい構文の強調表示を認識するために、エディターによってよく使用されます-たとえば、Geditはそれを行います。

解決

行をオーバーライドするには、スクリプトをパラメーターとしてBashにフィードします。

bash myScript.sh

または、「ソース」にすることができます。つまり、Bashシェル内から、次のいずれかを実行します。

source myScript.sh
. myScript.sh

コマンドを自分で貼り付けたかのように(ほぼ)動作します。

3
Ondra Žižka

私の場合、bashスクリプトは、すべての改行の前に復帰文字を追加したWindows PC上で作成されました。\x0Aではなく、\ x0D\x0A。 sedを使用してすべてのCRLFをLFに置き換えました。

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

私はちょうど同じ問題に遭遇しましたが、私のエラーは私の最初の行にあり、

#!bin/bash

の代わりに

#!/bin/bash
1
David

それは奇妙なエラーです。エラーの原因を見つけることをお勧めします。

1つは、pwdコマンドを確認することです。

type pwd

/ usr/bin/pwdまたは/ bin/pwdであることを確認し、スクリプトではないことを確認します。

file /usr/bin/pwd

スクリプトである場合、それはで始まるに違いない

#!echo
1
ash

次のリンクの手順に従いましたが、問題は解決しました。

参照リンク: スクリプトエラー-不正なインタープリター 実際、各行の終わりに余分な^ M記号がありました。だから、それを削除した後、私にとってはうまくいきました。

それが役に立てば幸い!

コマンドを使用してbashの場所を見つけることができます

whereis bash

また、bashパスをbad-interpreterエラーが表示されているパスにコピーできます。

0
Jyoti Dhiman

Homebrewを使用してBASHをインストールした場合、

#!/bin/bashを削除するだけで十分です。

0
Mohamed Anees A