47

UNIXウィンドウで実行すると「success」または「Failed」として出力されるシェルスクリプト「script.sh」があります。ここで、script.shの出力をunixコマンド変数に保存したいと思います。say $a = {output of script.sh}

4

5 に答える 5

87

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

一般に、より柔軟なアプローチは、コマンドから終了値を返し、それをさらに処理するために使用することですが、コマンドからの単純な出力をキャプチャしたい場合もあります。

于 2012-06-08T11:53:50.100 に答える
5

エコーコマンドの結果を保存したいとします

echo hello   
x=$(echo hello)  
echo "$x",world!  

出力:

hello  
hello,world!
于 2015-02-03T09:47:49.267 に答える
4

おそらく、スクリプトを書き直して、値を出力するのではなく返すようにする必要があります。それ以外の:

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印刷する代わりに。もちろん、これらの値を出力したり、妥当な戻り値で終了したりすることもできます。これにより、ラッパースクリプトは、スクリプトでの動作に柔軟性を持たせることができます。successexit 1Failed

于 2012-06-08T12:17:23.267 に答える
3
export a=$(script.sh)

お役に立てれば。変数と=の間にスペースがないことに注意してください。出力をエコーするには

echo $a
于 2012-06-08T11:53:21.950 に答える
0

スクリプトを前のドットで開始する必要があります。これにより、エクスポートされた変数が現在の環境に配置されます。

#!/bin/bash
...
export output="SUCCESS"

次に、そのように実行します

chmod +x /tmp/test.sh
. /tmp/test.sh

単一の値だけでなく出力全体が必要な場合は、他の回答が示すように、出力を変数に入れるだけです。

于 2012-06-08T11:55:08.370 に答える