まったく同じ権限などを持つ 2 つのシェル スクリプト ファイルがあります。そのうちの 1 つはコマンド ラインで名前を指定するだけで実行できますが、もう 1 つは sh または ./ を使用して実行する必要があります。理由は何でしょうか。
答え1
おそらく、2 つのスクリプトは異なるディレクトリにあります。ディレクトリの 1 つは PATH 上にありますが、もう 1 つは PATH 上にありません。
このtype
コマンドを使用して、現在のシェルの $PATH にファイルが存在するかどうかをテストできます。
$ type start_dropbox.bash
start_dropbox.bash is /home/saml/bin/start_dropbox.bash
この U&L Q&A を参照してください "$PATH にアプリケーションが存在するかどうかをテストするにはどうすればよいですか?より徹底した報道については「」をご覧ください。
答え2
スクリプトの名前を指定してそれが機能する場合は、スクリプトは /usr/bin/ /usr/sbin などにあります。すべてはパスの設定に依存します。
これを行う:
1. echo $PATH
スクリプトがこれらのディレクトリのいずれかにある場合は、絶対パスを使用せずに実行されます。
2. whereis "scripts name"
whereis または "which" で、その場所がわかります。あるファイルに実行権限を与え、他のファイルに与えていない可能性もあります。名前だけでは実行されないファイルについては、chmod u+x を実行してください。
- Python スクリプトの場合は #!/usr/bin/env python を追加し、bash の場合は #!/usr/bin/env bash などを追加する必要がある場合があります。