UNIXウィンドウで実行すると「success」または「Failed」として出力されるシェルスクリプト「script.sh」があります。ここで、script.shの出力をunixコマンド変数に保存したいと思います。say $a = {output of script.sh}
5 に答える
pwd
コマンドをキャプチャする2つの簡単な例:
$ b=$(pwd)
$ echo $b
/home/user1
また
$ a=`pwd`
$ echo $a
/home/user1
最初の方法が推奨されます。これが機能するために、の後にスペースを入れることはできないことに注意してください=
。
短いスクリプトを使用した例:
#!/bin/bash
echo "hi there"
それから:
$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there
一般に、より柔軟なアプローチは、コマンドから終了値を返し、それをさらに処理するために使用することですが、コマンドからの単純な出力をキャプチャしたい場合もあります。
エコーコマンドの結果を保存したいとします
echo hello
x=$(echo hello)
echo "$x",world!
出力:
hello
hello,world!
おそらく、スクリプトを書き直して、値を出力するのではなく返すようにする必要があります。それ以外の:
a=$( script.sh ) # Now a is a string, either "success" or "Failed"
case "$a" in
success) echo script succeeded;;
Failed) echo script failed;;
esac
あなたができるだろう:
if script.sh > /dev/null; then
echo script succeeded
else
echo script failed
fi
他のプログラムが出力を解析する必要がない場合は、他のプログラムがスクリプトを操作する方がはるかに簡単です。これは簡単な変更です。印刷する代わりに、そしてexit 0
印刷する代わりに。もちろん、これらの値を出力したり、妥当な戻り値で終了したりすることもできます。これにより、ラッパースクリプトは、スクリプトでの動作に柔軟性を持たせることができます。success
exit 1
Failed
export a=$(script.sh)
お役に立てれば。変数と=の間にスペースがないことに注意してください。出力をエコーするには
echo $a
スクリプトを前のドットで開始する必要があります。これにより、エクスポートされた変数が現在の環境に配置されます。
#!/bin/bash
...
export output="SUCCESS"
次に、そのように実行します
chmod +x /tmp/test.sh
. /tmp/test.sh
単一の値だけでなく出力全体が必要な場合は、他の回答が示すように、出力を変数に入れるだけです。