たいていの場合、実行したいスクリプトが現在の作業ディレクトリにないため、そのままにしたくありません。
別のディレクトリからスクリプト(BASH、Perlなど)を実行することは良い習慣ですか?彼らは通常、適切に実行するために必要なすべてのものを見つけますか?
もしそうなら、「遠い」スクリプトを実行する最良の方法は何ですか?それは...ですか
. /path/to/script
または
sh /path/to/script
そのような場合にSudo
を使用する方法は?たとえば、これは機能しません。
Sudo . /path/to/script
sh/path/to/scriptは新しいシェルを生成し、現在のシェルとは独立して彼女のスクリプトを実行します。 source
(。)コマンドは、現在のシェルのスクリプト内のすべてのコマンドを呼び出します。たとえば、スクリプトがexit
を呼び出すと、現在のシェルは失われます。このため、通常、shを使用して別のシェルでスクリプトを呼び出すか、フルパス(/で始まる)または相対パス(./)を使用してバイナリとしてスクリプトを実行する方が安全です。バイナリとして呼び出された場合、指定されたインタープリター(#!/ bin/bashなど)で実行されます。
スクリプトが必要なファイルを見つけるかどうかを知ることに関しては、スクリプトを見てそれが何をするかを見る以外に良い答えはありません。オプションとして、現在のフォルダーを離れることなく、サブプロセスでスクリプトのフォルダーにいつでも移動できます。
$(cd /wherever/ ; sh script.sh)
あなたは間違いなくそれを行うことができます(Sudo sh /pathto/script.sh
または./script.sh
のように他の人が言及した調整を行うと)。ただし、dirsを心配せずに無駄な余分なタイピングを省くために、システム全体で実行するためにいくつかのことの1つを行います。
1)/usr/bin
へのシンボリックリンク
ln -s /home/username/Scripts/name.sh /usr/bin/name
(名前を明らかに上書きするので、名前が重複していないことを確認してください。)これにより、開発フォルダーにそれらを保持できるので、必要に応じて調整できます。
2)Scripts dirをパスに追加します(.bash_profileまたはシェルにあるwhat.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
そして、それをルート/スーパーユーザーとして実行するには
Sudo sh /path/to/script
現在のディレクトリは、スクリプトが同じディレクトリにいるとスクリプトが想定している場合にのみ重要です。ほとんどのスクリプトはこれを行わないので、上記のように実行しても問題はありません。
私は通常、スクリプトを/usr/local/bin
または/usr/local/sbin/
(スクリプトにroot権限が必要な場合)に保管します。ファイルシステム階層標準(FHS)によると、これらは属しています。
あなたがしなければならないのは、これら2つのディレクトリがあなたのPATH
に追加されていることを確認することです。これを行うには、$HOME/.bashrc
ファイルを編集して次の行を追加します。
export PATH=$PATH:/usr/local/sbin:/usr/local/bin
Sudo
を介してrootとしてスクリプトを実行できるようにするには、これらのディレクトリをsecure_path
の変数/etc/sudoers
に追加する必要があります。
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
このファイルの編集はvisudo
を実行することで行われ、間違いがないことが保証されます。
なぜ誰もこれを提案していないのかわかりませんが、とても簡単です!私は何度かグーグル検索をしていて、この正確な答えを見つけることができなかったので、共有したいと思いました。 IMO、これが最善の解決策であり、最も簡単な解決策でもありますが、他の人は違った感じやことをするかもしれません。
# Place this somewhere in your .bashrc/.bash_profile/etc and edit as you see fit
YOURCOMMAND () {
cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}
最初に「cd」コマンドで、スクリプトの場所のディレクトリを伝えます。次に、「&&」を使用して、次のコマンドを実行した後に結合できるようにします。最後に、ターミナル内で実行するのと同じようにスクリプトを開きます。をBASHファイルに保存し、セットアップに5秒かかります。
これが誰かを助けたことを願っています。
頻繁に実行する必要があるスクリプトがあり、リソースを見つけるためのスクリプトの場所に依存している場合は、次のようなエイリアスでコマンドを組み合わせるだけで簡単に実行できます。
alias run-script="cd /home/user/path/to/script/ && bash script.sh"
この方法では、機能させるために他のものを変更する必要はありません。
Linuxでこのように機能するかどうかはわかりませんが、だれもそれを提案しなかった場合は機能しません。ただし、。/。/を使用してディレクトリに戻る代わりに。引用符を使用して絶対パスを指定できますか?多分それはあなたが実際にそれを考えるようになることさえできるようにするためにドライブ全体へのアクセスを与えるわけではありません。