0

リモート サーバー上のプロセスが強制終了されたかどうかを確認しています。私が使用しているコードは次のとおりです。

if [ `ssh -t -t -i id_dsa headless@remoteserver.com "ps -auxwww |grep pipeline| wc -l" | sed -e 's/^[ \t]*//'` -lt 3 ]
then 
  echo "PIPELINE STOPPED SUCCESSFULLY"
  exit 0
else
  echo "PIPELINE WAS NOT STOPPED SUCCESSFULLY"
  exit 1
fi

ただし、これを実行すると、次のようになります。

    : integer expression expected
PIPELINE WAS NOT STOPPED SUCCESSFULLY
1

返される実際の値は空白なしの「1」です。私はそれをチェックしました:

vim <(ssh -t -t -i id_dsa headless@remoteserver.com "ps -auxwww |grep pipeline| wc -l" | sed -e 's/^[ \t]*//')

そして、戻り値として整数と改行のみを示した ":set list"。

なぜこれが機能しないのか、ここで途方に暮れています。

4

3 に答える 3

1

コマンドの出力が、sshオプションのタブが前に付いた単なる整数である場合、sedコマンドは必要ありません。シェルは、演算子のオペランドとして使用する前に、先頭および/または末尾の空白を不要として削除し-ltます。

if [ $(ssh -tti id_dsa headless@remoteserver.com "ps -auxwww | grep -c pipeline") -lt 3 ]; then

sshシェルで実行した場合と手動で実行した場合の結果が異なる可能性があります。スクリプトでテストする前に出力できるように、変数に保存してみてください。

result=$( ssh -tti id_dsa headless@remoteserver.com "ps -auxwww | grep -c pipeline" )
if [ $result -lt 3 ];
于 2013-07-31T16:59:16.577 に答える