Linux Bashシェルスクリプトエラー:実行できません:必要なファイルが見つかりません。

Linux Bashシェルスクリプトエラー:実行できません:必要なファイルが見つかりません。

名前が異なる2つの同様のスクリプトがあります。 1つはうまく機能しますが、もう1つはエラーが発生します。誰でも何が間違っているのか教えてもらえますか?

これは私のtest.shスクリプトです。うまくいきます。

[nnice@myhost Scripts]$ cat test.sh 
#!/bin/bash
function fun {     
        echo "`hostname`"
}
fun 
[nnice@myhost Scripts]$ ./test.sh 
myhost.fedora

ここに別のスクリプトであるdemo.shがありますが、エラーが発生します。

[nnice@myhost Scripts]$ cat demo.sh 
#!/bin/bash
function fun { 
    echo "`hostname`"
}
fun
[nnice@myhost Scripts]$ ./demo.sh 
bash: ./demo.sh: cannot execute: required file not found

どちらのスクリプトも同じ権限を持ちます。

[nnice@myhost Scripts]$ ll test.sh 
-rwxr-xr-x. 1 nnice nnice 65 Oct 21 10:47 test.sh
[nnice@myhost Scripts]$ ll demo.sh 
-rwxr-xr-x. 1 nnice nnice 58 Oct 21 10:46 demo.sh

ベストアンサー1

あなたのdemo.shスクリプトはDOSテキストファイルです。これらのファイルにはCRLF行末があり、行末に追加のキャリッジリターン(CR)文字があると問題が発生する可能性があります。

これ特定これが引き起こす問題は、行のインタプリタ#!パス名が呼び出されたことを参照することです/bin/bash\r\r空白に似た文字であるキャリッジリターン文字でシンボル化されているため、通常は表示されません)。ファイルが見つからなかったため、エラーメッセージが発生しました。

この問題を解決するには、スクリプトをDOSテキストファイルからUnixテキストファイルに変換します。 Windowsでスクリプトを編集する場合は、Unixテキストファイルを生成するようにWindowsテキストエディタを設定してこれを実行できますが、dos2unix最も一般的なUnixバリアントのユーティリティを使用することもできます。

$ ./script
bash: ./script: cannot execute: required file not found
$ dos2unix script
$ ./script
harpo.local

コードに関して次のコマンドを実行またはecho `some-command`出力echo $(some-command)しないでくださいsome-command

#!/bin/sh

fun () {
    hostname
}

fun

(これでスクリプトは必要なものを使用していないので、bashより単純なシェルを呼び出すことに移動しました/bin/sh。)

おすすめ記事