2016-08-27 18 views
2

特定の機能を実行するスクリプトを作成しました。その特定の関数を実行した後、別の関数を実行する別のスクリプトを呼び出します。それは完璧に働いています。しかし、私はこのコード行と2番目のスクリプトと呼ばれています:Bashスクリプトでのパス変数の指定

(exec "/home/sh0/folder/folder2/folder3/secondScript") 

私は完全に別のファイルパスを別のマシン上で私のスクリプトを実行した場合は?どのマシンでもファイルパスを気にせずにスクリプトを呼び出す方法はありますか?

はまた、すべての私のスクリプトは、「FOLDER3」事前に

おかげだろうと同じディレクトリに格納されています!

+0

本当に意味が違いますか?つまり、すべての_everything_ですが、 'folder3/secondScript'は異なるマシンで異なる可能性がありますか?それとも、あなたのホームディレクトリ(おそらく '/ home/sh0/folder')のディレクトリがマシンごとに異なるのですが、相対パスは変わらないということですか? –

答えて

3

最終的には、スクリプトがインストールされている場所を知り、ディレクトリが$PATHであることを確認する必要があります。スクリプトへのパスを指定せずにsecondScriptを使用できます。

ただし、マシンによって場所が異なる場合は、分散をどのように切り捨てるかを決定する必要があります。 1つの一般的なオプションは、スクリプトを既知の場所、たとえば$HOME/binまたは/usr/local/binに保存し、パス上の既知の場所を保持します。/opt/program/bin(適切な名前はprogramですあなたが使用しています)。

もう1つの方法は、スクリプトが見つかる場所(PROGRAMLOCATION=/home/sh0/folder/folder2/folder3およびexport PATH=$PATH:$PROGRAMLOCATION)を指定する環境変数を使用することです。環境変数(PROGRAMLOCATIONPATH)が適切に設定されていることを確認する必要があります。これは扱いにくいことがあります。

フォルダ名が一意であると思う場合は、findを使用してディレクトリを見つけることができます(ただし、そうしないでください)。あなたが同じ名前の6つの異なるディレクトリを見つけたらどうしますか?さらに、拘束されていないfindは遅く、特にNFSマウントのファイルシステムを使用している場合は遅いです。

1

#!/bin/bash 

MY_PATH="$PWD" 
FOLDER3="folder3" 

echo "$MY_PATH/$FOLDER3" 

の下に表示のようにあなたは、単に私たちはあなたが探したりしていない場合は、この何を知ってみましょうパスを格納することができます。

関連する問題