2016-07-11 8 views
0

それらを実行しませんエラーがスローされますここに私の問題だ:バッシュ:他のスクリプト内で実行されているスクリプトは、私は別に

私は多様なファイルを生成するために4つのスクリプトを持っています。私は他の出力ファイルを生成する引数として渡すソースファイルを持っています。 4つのスクリプトは連続して実行されると考えられています。 彼らはこのようなコードを持っている:

while read line; do                
    if echo "${line: -3}" | grep -q ','           
    then                   
     if echo "${line:0:4}" | grep -q 'int'         
      then ... 

は私に右の出力を与え、それらを別々に実行します。ある他の人を呼び出すために

if echo "${line: -3}" | grep -q ',' 

私の主なスクリプト:上記の行に、すなわち参照

./FirstScript.sh: 35: ./FirstScript.sh: Bad substitution 

: メインスクリプトからそれらを呼び出すには、のようないくつかのエラーメッセージで、間違った行い

#!/bin/bash                
sh ./FirstScript.sh $1 
sh ./SecondScript.sh 
sh ./ThirdScript.sh $1 

すべてのスクリプトが$ chmod 755 * .sh

答えて

2

あなたのshebangがbashを指していても、shと呼んでいます。あなたはbashのようにそれらを呼び出したい場合は、単に

#!/bin/bash                
bash ./FirstScript.sh $1 
bash ./SecondScript.sh 
bash ./ThirdScript.sh $1 

Shがエラーを引き起こしている可能性がありますbashが保持している機能の一部が欠けているなど、bashのでSHを交換してください。この詳細については、Difference between sh and bash を参照してください。実際に

+0

問題が解決しました! ありがとうございます。 – Joster

2

に設定されていますシステム上のsh#!行は、スクリプトをbashと解釈するように見えますが、メインスクリプトはを使用していますが、これはフィーチャーコンプリートとしてbashとは異なる可能性があります。

+2

これは、定義上、「bash」としての機能完全なものではありません。 'bash'を' sh'として実行すると、多くの 'bash'拡張が無効になります。 – chepner

+0

それは私がまだ非常によく違うことができない一つのことです。 Bashは何か「進化したスクリプト」ですか?その場合、どうやってBashスクリプトと呼ぶことができますか? 「sh./xxxx.sh」としてそれらを別々に実行する理由はうまくいきますが、別のスクリプトから呼び出すことはありません – Joster

+0

これは確かに問題でした。 – Joster

0

、私は最初の文で#/ binに/ bashのを述べたように、私が行うことができます!

#!/bin/bash                
./FirstScript.sh $1 
./SecondScript.sh 
./ThirdScript.sh $1 

/binに/ bashを持つすべての実行可能ファイルを実行すると言われています。

関連する問題