.sh ファイルには、`#!/bin/bash` 行があっても `sh app.sh` が必要です

.sh ファイルには、`#!/bin/bash` 行があっても `sh app.sh` が必要です

私は、この行を含めると

#!/bin/bash

ファイルの先頭にbashスクリプトとして認識され、実行できるようになります。

file.sh

の代わりに

sh file.sh

しかし、私の場合、はfile.shのようなものを与えます。なぜでしょうか?test.shtest.sh: command not found

アップデート

を使用する必要があることに気づきました./。しかし、とにかく現在のディレクトリを検索すると思いましたか?

./test.sh

答え1

まず、ファイルが実行可能であることを確認する必要があります。

chmod +x file.sh

そして、それを実行するには、PATH (つまり、OS が実行するファイルを探すときに検索するファイルのディレクトリの 1 つ。これは で見つけることができます) に配置するか、echo $PATH次のように入力する必要があります。

./file.sh

単に入力するのではなくfile.sh

file.shPATH 内にある場合は、 と入力するだけで済みます。これをお勧めします。 は適切な場所です~/bin。そこにない場合はそのフォルダーを作成してください。Ubuntu では、ログイン時にパスに追加されます。

答え2

現在のディレクトリが PATH にないため、./file.sh で起動する必要があります。

もしこれが十分でなければ、frabjousが示唆しているように、プログラムをshebangでchmod a+x始める必要があります。#!/bin/bash

bash file.sh

ない

sh file.sh

sh が /bin/bash へのシンボリック リンクであっても同じです。

シェルは、それがどのように呼び出されたかをチェックし、sh互換モードで動作するために として呼び出される可能性があるため、 として呼び出された場合は機能する一部の bashisms を処理できない可能性がありますbash file.sh

それはあなたの問題ではありませんでしたが、これらの微妙な違いを知らないと、問題になる可能性があります。

関連情報