.sh
を使用してRedhatで./test.sh
ファイルを実行しようとしたとき
次のようなエラーが発生します
[test@tester unix_scripts]$ ./test.sh
: No such file or directory
[test@tester unix_scripts]$
また、chmod 777 test.sh
を使用してファイルの権限を設定しました
それでも同じエラー
誰かが私を助けてくれますか?
実際に問題となったのは、使用したスクリプトがdosで作成されたため、dos2unixコマンドを使用してスクリプトをunixに変換しました。貴重なご協力をありがとうございました。
スクリプトの最初の行に置くのを忘れているかもしれません:
#!/bin/bash
例えば:
#!/bin/bash
echo Hello World
上記のhelloworldの例のような単純なシェルスクリプトを試してみたら?それは機能しますか?
ちなみに、SELinuxコンテキストについてはよろしいですか?
何を言いますか:getenforce
は言いますか?
機能:ls -l test.sh
いう?
私の最善のアドバイスは、最初に非常に単純なスクリプトを試して、すべての環境とコンテキストの動作を確認できるようにすることです。
正しいディレクトリにいて(「ls」と入力するとディレクトリの内容を確認できます)、ファイル名が「test.sh」であることを再確認してください。あなたも試してみたいかもしれません:
[test@tester unix_scripts]$ sh test.sh
getenforce
をお試しください。がenforcingを返す場合、selinuxはオンになっており、スクリプトを実行するには別のコンテキストにする必要がある場合があります。
getenforce
が強制を返す場合は、dmesg、/ var/log/message /var/log/audit/audit.log、またはselinuxがホストにログオンする場所をチェックして、正確な問題を見つけてください。
または、実行中の別のスクリプトと同じコンテキストにスクリプトをchconしてみてください。
ファイルのコンテキストを表示するには、ls -lZ
を使用します。
または試してみてください
chcon --reference=/script/that/will/work /script/that/wont/work
たぶんchconのmanページをチェックしてください。-reference構文については100%確信が持てません。
スクリプトにハッシュバンを置いても、スクリプトの実行に必要なものは変わりません。実行可能に設定して(chmod + x test.sh)、実行する(./test.sh)か、シェルの引数として呼び出す(sh test.sh)必要があります。
$ PATH変数(〜/ bin /、/ usr/local/bin /など)から任意の場所にスクリプトを配置することもできます。スクリプトが実行可能であれば、その場所(test.sh)を参照せずにどこからでも実行できます。 。
シェルの引数なしでスクリプトを実行すると、デフォルトで、現在使用しているシェルで実行されます。 それは、ハッシュバングが重要になる場所です...ユーザーがtcshやkshなどを使用している場合でも、それがbashスクリプトとして実行されるようにしたい場合は、#!/ bin /スクリプトの最初の行としてbash。
Test.shはunix_scriptsディレクトリにありますか?
存在しないtest.shで参照されているファイルまたはディレクトリはありますか?エラーは、スクリプトの実行からではなく、スクリプト内から発生した可能性があるためです...
はい、#である必要があります! (クラッシュバン!):)
スクリプトが置かれているディレクトリで実行された次のコマンドの結果を投稿できますか?
ls -l
cat test.sh
shまたはbashを使用していますか? (つまり、スクリプトの最初の行は何ですか?)
#!/ bin/shを使用している場合は、/ bin/shが存在することを確認する必要があります(typewhich sh )
/ bin/shがインストールされていない場合は、#!/ bin/bashまたは別のシェルを試す必要がある場合があります。