sh /path/to/script は、新しいシェルを生成し、現在のシェルから独立してスクリプトを実行します。 source
(.) コマンドは、現在のシェルでスクリプト内のすべてのコマンドを呼び出します。スクリプトがたまたま exit
を呼び出した場合 たとえば、現在のシェルが失われます。このため、通常は、sh を使用して別のシェルでスクリプトを呼び出すか、フル (/
で始まる) を使用してスクリプトをバイナリとして実行する方が安全です。 ) または相対パス (./
)。バイナリとして呼び出された場合、指定されたインタープリター (#!/bin/bash
) で実行されます。 、例)。
スクリプトが必要なファイルを見つけるかどうかを知ることに関しては、スクリプトを調べてそれが何をするかを確認する以外に良い答えはありません。オプションとして、現在のフォルダーを離れることなく、サブプロセス内のスクリプトのフォルダーにいつでも移動できます。
(cd /wherever/ ; sh script.sh)
あなたは間違いなくそれを行うことができます( sudo sh /pathto/script.sh
のように他の人が言及した調整で または ./script.sh
)。ただし、ディレクトリを気にせず、無駄な余分な入力を省くために、システム全体でそれらを実行するいくつかのことの 1 つを行います。
1) /usr/bin
へのシンボリックリンク
ln -s /home/username/Scripts/name.sh /usr/bin/name
(名前が重複していないことを確認してください。明らかにオーバーライドされるためです。)これにより、必要に応じて調整できるように、開発フォルダーにそれらを保持することもできます。
2) Scripts dir をパスに追加します (.bash_profile を使用するか、シェルにあるwhatever.profile を使用します)
PATH=/path/to/scripts/:$PATH
3) .bash_profile
にエイリアスを作成する ~/.bash_profile
で 次のようなものを追加してください:
alias l="ls -l"
おわかりのように、構文は単なるエイリアス、コマンドとして機能する数字、コマンドです。したがって、端末のどこにでも「l」と入力すると、ls -l
になります。 sudo が必要な場合は、alias sl="sudo ls -l"
だけです l と sl の違いに注意してください (役に立たない例として)。
どちらの方法でも、sudo nameofscript
と入力するだけです。 そしてあなたの道を進んでください。 ./ または ./ をいじる必要はありません。またはshなど。最初に実行可能としてマークするだけです:D
私はいつもあなたが言うようにします
sh /path/to/script
root/スーパーユーザーとして実行する
sudo sh /path/to/script
現在のディレクトリが問題になるのは、スクリプトがユーザーが現在のディレクトリと同じフォルダーにいると想定している場合のみです。ほとんどのスクリプトはこれを行わず、上記のように実行しても問題ないと思います。