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。)

答え2

(検索がここで終わったので)test.shがあります。

#!/bin/bash
echo "test"

NixOSにコピーして入手しました。

-bash: ./test.sh: cannot execute: required file not found

Windowsキャリッジリターンを削除するためのデフォルトのvimメソッドを試しました。

:e ++ff=unix 
:%s/\r\(\n\)/\1/g

しかし、これは役に立ちません。

最初の行を次に変更しました。

#!/usr/bin/env bash

今大丈夫です。

に変更することができたでしょう。

#!/bin/sh

私はbashismを使わずに別のスクリプトを使用しているので以前はしたがって、bashを呼び出すための優れた移植可能な方法が必要です。

答え3

notepad++ファイルを開いたときにファイルの右下にキャリッジリターン()が表示されたら、ダブルクリックして「Unix()」に変更します。CL RFLF

下の図を参照してください

答え4

私の場合、Windowsがこのshebangを#! /user/bin/bash代わりに使用しようとしたため、この問題が発生しました#!/bin/bash

関連情報