誰でもどこでもスクリプトを実行できるようにする方法

誰でもどこでもスクリプトを実行できるようにする方法

このトピックは以前に議論されましたが、私が読んでいるすべての記事は私をより混乱させます。

たとえば、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。なぜなら、含まれるディレクトリがあなたのディレクトリにある場合、シェルは別のスクリプトを実行することを選択できるからです。これが設定された端末では、現在の作業ディレクトリに関係なく実行が可能である。testtest$PATHexport PATH=$PATH:/home/Bill/scripts$PATHtest

スクリプトいいえ$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/bintesttest

答え2

すでに「test」コマンドがあるので、スクリプト名を「test」として指定するのは良い考えではありません。

タイプテスト
テストはシェルに組み込まれています

これに加えて、PATH変数は常にプログラムまたはスクリプトを見つけるために使用できます。したがって、PATHにスクリプトパスを入力します。

エクスポート PATH=/your/place/to/directory_of_script:$PATH

スクリプトに簡単にアクセスできるようになります。しかし、シェルの組み込み名や他の既存のプログラムやスクリプト名を使用しないでください。

関連情報