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
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
同じ問題がありました。 #!/bin/bash
を削除すると、私にとってはうまくいきました。 bashはシステムパス上にあるため、bashの場所を追加する必要はないようです。
私は別の解決策を見つけました こちら 。変化する
#!/bin/bash
for
#!/usr/bin/bash
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
コマンドを自分で貼り付けたかのように(ほぼ)動作します。
私の場合、bashスクリプトは、すべての改行の前に復帰文字を追加したWindows PC上で作成されました。\x0Aではなく、\ x0D\x0A。 sed
を使用してすべてのCRLFをLFに置き換えました。
sed -i 's//\r/\n//\n/g' /path/to/file.sh
私はちょうど同じ問題に遭遇しましたが、私のエラーは私の最初の行にあり、
#!bin/bash
の代わりに
#!/bin/bash
それは奇妙なエラーです。エラーの原因を見つけることをお勧めします。
1つは、pwdコマンドを確認することです。
type pwd
/ usr/bin/pwdまたは/ bin/pwdであることを確認し、スクリプトではないことを確認します。
file /usr/bin/pwd
スクリプトである場合、それはで始まるに違いない
#!echo
次のリンクの手順に従いましたが、問題は解決しました。
参照リンク: スクリプトエラー-不正なインタープリター 実際、各行の終わりに余分な^ M記号がありました。だから、それを削除した後、私にとってはうまくいきました。
それが役に立てば幸い!
コマンドを使用してbashの場所を見つけることができます
whereis bash
また、bashパスをbad-interpreterエラーが表示されているパスにコピーできます。
Homebrewを使用してBASHをインストールした場合、
#!/bin/bash
を削除するだけで十分です。