2017-09-21 6 views
0

をコマンドが見つかりません私は、シェルスクリプトの次の行に問題を抱えている:バッシュ場合や声明、

if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then 

私は、「[:コマンドが見つかりません」を取得するスクリプトを実行するとき。私はなぜなのか理解していない。

+ '[' -f /etc/debian_version ']' 
++ lsb_release -r -s 
+ '[' 17.04 == 16.04 ']' 
++ lsb_release -r -s 
+ ' [' 17.04 == 17.04 ']' 
./mhn/scripts/install_mongo.sh: line 8:  [: command not found 

16.04ではなく17.04で実行している場合のみエラーが発生します。私が文を切り替えて17.04を最初にチェックすると、17.04ではなく16.04に壊れます。声明の後半の何かが壊れている。

https://github.com/ngatilio/mhn/blob/2e992934a350e0367a214dc86cc63e7ecd5d59ef/scripts/install_mongo.sh

+1

あなたの質問にOS(Ubuntuの?)と、bashのバージョンを追加します。 – Cyrus

+1

その行を新しいスクリプトにコピー・ペーストしてそのスクリプトを単独で実行すると、同じエラーが表示されますか? –

+0

@thatotherguyそれはちょうどifステートメントであればうまく動作します。しかし、完全なスクリプトでは8行目ですが、bashは「8行目:[:コマンドが見つかりません」 – d1str0

答えて

3

あなたの問題があります:

+ ' [' 17.04 == 17.04 ']' 

あなたが最後[前にファンキーなスペース文字のいくつかの種類を持っているように見えます。削除して再入力して、通常のASCIIスペースに変換します。

ここに行をコピーして貼り付けたり、非生のgithubビューで表示すると、その行は通常のスペースに変換されるため、投稿には表示されません。これは、別のファイルにコピー・ペーストされたときにうまく動作する理由です。ここで

は、ダウンロードされたファイルにShellCheckだ(と、コピー&ペーストではない)githubのから:

$ shellcheck install_mongo.sh 

In install_mongo.sh line 8: 
    if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then 
               ^-- SC1018: This is a unicode non-breaking space. Delete and retype it. 
+0

@ d1str0:これは問題を示しています:' cat -A install_mongo.sh | sed -n 8p' – Cyrus

+0

うわー!それはPITAでした。また、シェルチェックは超クールなようです。本当にありがとう! – d1str0

0

はこれを試してみてください:

if [ "$(lsb_release -r -s)" == "16.04" -o "$(lsb_release -r -s)" == "17.04" ]; then 
+0

答えをありがとうが、残念ながらそれは私の発行を解決していないだろう。もう一つの答えは私の問題を正確に解決しました。 – d1str0

+0

それを解決策としてマークしてください。 –