このトピックは以前に議論されましたが、私が読んでいるすべての記事は私をより混乱させます。
たとえば、testという単純なbash hello worldスクリプトを使用します。 Billユーザーとして作成してchmod 755 test
実行可能にしました。スクリプトを見つけてエクスポートしよう/home/Bill/scripts
としています。PATH=$PATH:/home/Bill/scripts
そのディレクトリにある場合./test
。/home/Bill
ルートディレクトリに切り替えると、環境パスにスクリプトを追加したり、エクスポートコマンドを使用したようですが、スクリプトを見つけることができません。
また、スクリプトにスクリプトパスを追加することができ、/etc/sudoers
パスワードは必要ありませんが、それを実行するにはユーザーが必要であることも読みましたsudo ./test
。このスクリプトをどこにいても、すべてのユーザーが普遍的にアクセスして実行できるようにする方法はありますか?
./test
一方、test
私が作成したスクリプトの違いについて少し混乱しています。test
しかし、私や他のユーザーがスクリプトを実行すると、スクリプトを実行するのですか、それとも./test
単に実行するのですか?test
答え1
スクリプトパス(相対または絶対)を指定するか、スクリプトを含むディレクトリがシェル検索に含まれていることを確認してスクリプトを実行できます$PATH
。
この例の名前が悪いという事実はしばらく無視してくださいtest
。なぜなら、含まれるディレクトリがあなたのディレクトリにある場合、シェルは別のスクリプトを実行することを選択できるからです。これが設定された端末では、現在の作業ディレクトリに関係なく実行が可能である。test
test
$PATH
export PATH=$PATH:/home/Bill/scripts
$PATH
test
スクリプトいいえで$PATH
、または明示的に指定する場合どの test
実行したい場合は、ファイル名だけでなく、ファイルの相対パスまたは絶対パスも指定できます。したがって、現在の作業ディレクトリに関係なく、フルパス()を提供して常にスクリプトを実行できます/home/Bill/scripts/test
。
一部の例では、相対パスを指定してスクリプトを実行することもできます。ここで、プロンプトは作業ディレクトリを示します。
/home/Bill/scripts$ ./test
/home/Bill$ scripts/test
/home/Bill/documents$ ../scripts/test
/home/James/documents$ ../../Bill/scripts/test
実行しようとするとエラーが発生する理由
/home/Bill$ ./test
ファイルがないので/home/Bill/test
実行したいのです(「test
現在のディレクトリのファイル.
」)
すべてのユーザーがスクリプトへの絶対パスまたは相対パスを指定せずに名前のみを使用してスクリプトを実行できるようにするには、そのスクリプトがすべてのユーザーに存在する必要があります$PATH
。たとえば、すべてのユーザーのデフォルトの場所にスクリプトを配置します。ただし、スクリプト名を別のものとして指定する必要があります。なぜならこれは特殊なケースだからです。これはシェル組み込みです。/home/Bill/scripts
$PATH
$PATH
/usr/local/bin
test
test
答え2
すでに「test」コマンドがあるので、スクリプト名を「test」として指定するのは良い考えではありません。
タイプテスト テストはシェルに組み込まれています
これに加えて、PATH変数は常にプログラムまたはスクリプトを見つけるために使用できます。したがって、PATHにスクリプトパスを入力します。
エクスポート PATH=/your/place/to/directory_of_script:$PATH
スクリプトに簡単にアクセスできるようになります。しかし、シェルの組み込み名や他の既存のプログラムやスクリプト名を使用しないでください。