GNU/Linux >> Linux の 問題 >  >> Linux

別のディレクトリからスクリプトを実行する

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

現在のディレクトリが問題になるのは、スクリプトがユーザーが現在のディレクトリと同じフォルダーにいると想定している場合のみです。ほとんどのスクリプトはこれを行わず、上記のように実行しても問題ないと思います。


Linux
  1. すべてのファイル(非表示を含む)をあるディレクトリから別のディレクトリに移動するにはどうすればよいですか?

  2. どのシェルで実行していますか?

  3. シェルスクリプトの連想配列?

  1. シェルスクリプトの正しいロック?

  2. WINEで実行中のプログラムからシェルコマンドを実行

  3. CentOS:ディレクトリを別のディレクトリにコピーする

  1. シェルスクリプトでSetuidを許可しますか?

  2. Linuxシェルでcpコマンドを使用して、ディレクトリ全体を別のディレクトリにコピーするにはどうすればよいですか?

  3. マウントなしで、あるワークステーションから別のワークステーションへのシンボリック リンク