次のコマンドを使用すると、Webページに特定のコンテンツがあることを確認できます。何かを見つけなければ何も出力しません。
curl -v --silent https://somedomain.com/somepage.html 2>&1 | grep 'some content'
問題は、これをシェルスクリプトに追加すると、出力が抑制されなくなることです。
#!/bin/bash
TEST1="curl -v --silent https://somedomain.com/somepage.html 2>&1 | grep 'some content'"
$TEST1
if [[ $? != 0 ]]; then
#do something if exit status of last command not equal to zero
fi
VAL1
スクリプトの出力を変数(
#!/bin/bash
TEST1="curl -v --silent https://somedomain.com/somepage.html 2>&1 | grep 'some content'"
VAL1+=$($TEST1)
echo "result should be blank or the found grep $VAL1"
2>&1
コマンドを直接実行すると期待どおりに機能しますが、スクリプトに追加すると出力がコマンドラインに直接表示されるのはなぜですか?
修正する
意見にあるJeffsのヒントを通して正しい方向に進むことができました。許容される回答は正しいです。私がスクリプトのために行ったことは、元の変数に割り当てようとしたコードを関数に移動して、すべて$( ... )
が期待どおりに機能することです。
#!/bin/bash
# note that -z checks if variable is empty
test1() {
VAL1=$(curl -v --silent https://somedomain.com/somepage.html 2>&1 | grep 'some content')
if [[ -z $VAL1 ]]; then
VAL1=test1fail
fi
}
test1
echo $VAL1
ベストアンサー1
jeff schallerでコメント協会鼻にいます。 Bashマニュアルの主な情報(https://www.gnu.org/software/bash/manual/bashref.html#Simple-Command-Expansion)
単純なコマンドを実行すると、シェルは左から右に次の拡張、割り当て、およびリダイレクトを実行します。
ステップ1リダイレクトを識別して保存します。
ステップ2では、変数の拡張が行われます。
シェルには手順1のリダイレクトは表示されません。