2016-04-19 25 views
-1

私はこのスクリプトからコードのリターンを取得しようとしている:終了コード

#!/bin/bash 
echo "CM 1" 
ssh -i key/keyId.ppk [email protected] " 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
" 
echo $? 

しかし、最後のコマンドecho $? 0を返す代わりの1

そして場合は、個別に実行してみてください(ない)スクリプトとして:

  • sshコマンド:ssh -i key/keyId.ppk [email protected]
  • grepのblabla DDD =>私はMSG「はgrepを取得:DDD:そのようなありませんファイルまたはディレクトリ "
  • :if [! $? -eq 0];次に出口1。 fi
  • then:echo $? =>それは期待通りに1を返します

私のスクリプトではうまくいかない理由はありますか? $は、単一引用符でエスケープされていないため

は、あなたが

+0

「何も返さない」とはどういう意味ですか?どのバージョンを使用していますか?それは私のためにうまく動作します。 – Jakuje

+0

'ssh'の' -t'を使う理由は何ですか? –

+0

@Raily Albeg Wein:特別な理由はありませんでした。@ – bbenjii123

答えて

1

このコード

ssh -i key/keyId.ppk [email protected] " 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
" 

があなたのシェルで$?を評価していないリモートのいずれかでお願いします。あなたは望ましい行動に達するためにそれを逃れるべきです。一度ローカルシェルで評価を避けるために、リモート側のbashに渡されたときの評価を避けるために2回目です。または、コマンドを単一引用符で囲みます。

ssh -i key/keyId.ppk [email protected] ' 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
' 
+1

また、終了ステータスを0と比較すると、 'if'コマンドはすでに実行されています! '['と '$? 'を使う必要はありません。 'もし! grep blabla ddd'は同等です。 –

+0

@ WumpusQ.Wumbley True。しかし、私は彼のアルゴリズムを台無しにしたくなかった:) – Jakuje

+0

それは動作し、あなたの助けに感謝! – bbenjii123