2017-04-19 5 views
1

私はUNIXでシェルスクリプト内から別のシェルスクリプトを呼び出すようにしようとしています(bashの)Unixの

第一シェルスクリプト(script_1.sh)でシェルスクリプトから別のシェルスクリプトを呼び出す方法:

VARIABLE_1=<VALUE> 
<unix_code> 
<unix_code> 
.. 
.. 
.. 
export VARIABLE_1 
bash -x script_2.sh 
bash -x script_3.sh 

私のここでの要件は、VARIABLE_1の値をscript_2.sh & script_3.shに渡すことです。私はscript_2.shを実行して、script_2.shに引数を渡して正常に動作していました。私がscript_3.shを含むと、問題が始まった。私が最初のシェルスクリプトを実行すると、以下のエラーが表示されます。

/usr/bin/sh: /usr/bin/sh: cannot execute binary file 

これがなぜ起こっているのかわかりません。また、引数を渡して他のシェルスクリプトを呼び出すには、この方法をお勧めしますか?教えてください

+1

script_3.shはscript_1.shの外部で実行されたときに正しく実行されますか? –

+0

コマンドラインから '/ usr/bin/sh'を実行できることを確認してください。 'script_3.sh'がどこかの'/usr/bin/sh'を呼び出しているようです。 – cdarke

+0

完全なエラー出力、特にエラーの直前の 'xtrace'(' -x')出力を表示できますか? – cdarke

答えて

-1

script_3.shに実行権限がない可能性があります。 chmodを使用して適切な権限を与えてからもう一度試してください

1

ファイルには実行権限がないわけではありません。実際、スクリプトを "bashファイル名"として実行すると、ファイル名に対する実行可能権限は必要ありません。

エラーメッセージは、スクリプトファイルが実際のスクリプトファイルではなく、おそらく実行可能なバイナリファイルであることを示しています。その場合は、行いません。

bash +x filename 

を単に実行します。

filename 

また、スクリプトに引数を渡すために、あなたはこのようにそれを行うことができます。

scriptfile arg1 arg2 arg3

スクリプト内で$1$2$3としてください。それらのすべてを参照するには$*

EDIT:

はまた、あなたがbash scriptfileを使用する必要はありませんスクリプトを実行することに注意してください、あなただけscriptfileを実行することができます。その場合、スクリプトファイルには実行可能権限(例:chmod +x scriptfile)が必要です。さらに、ファイルが現在のディレクトリにあり、.PATH変数の一部でない場合、スクリプトファイルは見つかりません。

VARIABLE_1=<VALUE> 
... 
./script_2.sh "$VARIABLE_1" 
./script_3.sh "$VARIABLE_1" 

あなたはもはやVARIABLE_1をエクスポートする必要があります。./scriptfile

あなたのスクリプトがに変化しなくなるように、その場合は、あなたのスクリプトファイルを実行する必要があります。引用符は、VARIABLE_1の内容が単一の引数として渡されることを確認するために必要です。 script_2.shとscript_3.shの値は$1となります。 VARIABLE_1にスペースが含まれていて引用符を省略すると、各単語は個別の値として渡されます。つまり、$1には最初の単語があり、$2は2番目などです。

+0

エラーメッセージは、 '/ usr/bin/sh'を実行できないことを意味します。それがスクリプト名だったら 'script_3.sh:script_3.shはバイナリファイルを実行できません ' – cdarke

+1

script_3.shの内容はなんですか?おそらく、エラーメッセージはscript_3.shの中で実行されたものから来ているのですが、script_3.shの実際の呼び出しではなく、 – kontiki

+0

と私の推測ですが、OPは私の質問に答えていません – cdarke