名前が異なる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
。)