2017-06-28 1 views
0

私はシェルスクリプトでコマンドを実行し、その出力を確認しようとしています。特定のテキストがあれば、特定の文字列にグローバル変数を設定したいと思います。 コマンド~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.は端末で動作しますが、シェルスクリプトでは動作しません。 私はここで何が欠けていますか?かもしれないバイパスをハックmacのシェルスクリプトから出力を得るには?

RESP=$(~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.') 
echo $RESP 
... 

この(速い!):後

#!/bin/bash 
Android_Command=''  

MKCOMMAND='~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.'' 
RESP=$($MKCOMMAND) 
echo $RESP 

if [ '$RESP'=='The "android" command is deprecated.' ]; then 
Android_Command='Version2' 
else 
Android_Command='Version1' 
fi 

は私が

~/Library/Android/sdk/tools/android: No such file or directory 
+0

「動作しません」と記述してください。また、表示されているコードに改行や引用符が含まれていると、おそらく動作しません(シングルクォートではシングルクォートを使用できません)。 – pvg

+0

はシェルスクリプトで実行されないという意味です。端末上で実行され、関連する出力を提供します。 – iSD

+0

あなたの端末は、シバンにあるどのようなシェルも使用します。しかし、シェルスクリプトはそれを実行するためにどのようなシェルを使用しますか?そして、あなたが得るエラーメッセージは何ですか? – alvits

答えて

0

あなたの最後の編集から、あなたの端末からスクリプトを実行していなかったことが明らかになりましたが、ただ1行だけ実行していました。

シェルスクリプトでは、一重引用符内のものはすべてシェル展開の対象にはなりません。言いましたが、~|の両方を引用することはできません。

リダイレクトは実行前にシェルによって作成されます。これは、パイプ|がコマンドandroidのパラメータとして扱われるため、MKCOMMANDが実行できないことを意味します。

このようなスクリプトはどうやって処理しますか?リダイレクトを引用しないでください。

#!/bin/bash 

if ~/Library/Android/sdk/tools/android list | grep -q 'The "android" command is deprecated.'; then 
Android_Command='Version2' 
else 
Android_Command='Version1' 
fi 

ifステートメントは複雑なステートメントを受け入れます。 grep -qは、文字列を検出した場合は0を返し、それ以外の場合は0以外を返します。

-1

は(MKCOMMAND変数を使用せずに)直接、代わりにあなたのコマンドを実行してみ得る出力されますいくつかのバッシュあなたが持っている可能性があります問題を引用しています。

+0

なぜ* downvote * ...これはここでうまく動作しているように見えますか?) –

関連する問題