2017-04-27 5 views
0

私はソフトウェアのシェルスクリプトを調達していますが、私は次のエラー受け続けて実行していないif文(?):私は、理論的に誤ったブロックをチェックしましたバッシュ正しい正しく

>source thefile.sh 
'else' builtin not inside of if block 

を、私はできません構造

if [ condition ] 
then 
if [ condition2 ] 
then 
dostuff 
else 
dostuffagain 
fi 
else # this is the else which generates the error 
stuffstuffstuff 
fi 

に何か問題を見つけ、私はそれに何かを見ることができない:/、その後、すべての場合には、それ自身Fi回線によって終了した場合には、ネストされたのです。なぜシェルはそれについて動揺するのですか?

+2

は 'エラーなしで実行thefile.sh'していますか?例えば、 – Aaron

+0

を 'condition'と' stuff'を意味のあるものに置き換えたとき、シバンは無視され、あなたの事例は私のために働くので、貴重な情報かもしれません。 – Robin479

+0

http://shellcheck.netでファイル全体を確認してください。がんばろう。 – shellter

答えて

1

これはbashエラーメッセージではありません。私はsource code for the fish shellでそれを見つけた:

case parse_keyword_else: { 
       this->parse_error(token, parse_error_unbalancing_else, 
            L"'else' builtin not inside of if block"); 

これは、あなたが仕事に行くされていないfishシェル、中sourcebashスクリプトにしようとしている私に語りました。 sourceは、スクリプト自体を実行するためにシェル(この場合はfish)に指示しますが、fishシェルの構文は、スクリプトで使用されているbash構文とはまったく異なります。

は(私はあなたがbashfishの両方で作業したいpolyglot scriptを書くために試みることができると仮定し、これは難しいでしょう。)直接実行するとき

+0

あなたは正しいです、私はまだ私が魚の殻の中にいたことを認識していませんでした!ありがとう – Mutewinter