2016-03-23 16 views
0

これは私がしようとしていますものです:2番目のサーバーにsshを実行してコマンドを実行し、出力を変数に割り当てる方法はありますか?

fromServer=$(ssh -A first.com ssh second.com rpm -qa | grep exampleString) 
echo $fromServer 

エコーは何も印刷されません。

ssh first.com 
ssh second.com 
rpm -qa | grep exampleString 

がどのように変数に1行に3つの手順を組み合わせて、出力を保存することができます:私は手動で最初にSHHした後、第2にsshであれば、私は出力を取得し、コマンドを実行しますか?

+0

ノート。 –

+0

コマンドをグループ化し、コマンドからホスト名とパラメータを区別するために、引用符またはその他の技術を使用する必要があります。最初のsshに渡されるコマンドは何ですか? 2番目のコマンドに渡されるコマンドは何ですか?それぞれのシェルはどのようにそれを把握していますか? – mpez0

+0

'ssh second.com rpm -qa | grep exampleString 'または「ssh second.com rpm -qa | grep exampleString」は動作を変更していないようです。他にどのようにコマンドをグループ化できますか? – Nelson

答えて

1

使用、適切な引用やエスケープ:

fromServer=$(ssh -A first.com 'ssh second.com rpm -qa | grep exampleString') 
echo $fromServer 

または

fromServer=$(ssh -A first.com ssh second.com rpm -qa \| grep exampleString) 
echo $fromServer 

% VAR=$(ssh -C [email protected] ls -la \| grep vim) 
% echo $VAR 
-rw------- 1 user user  15153 Mar 22 13:45 .vimrc 

を編集:oooooooh、卑劣な、私はあなたがやっていた見なかった SSH

☺だから、もう少し引用する必要があるでしょう。 URパイプは first.comによって解釈されます。あなたはそれが first.comによって解釈されていないので、パイプをエスケープする必要がありますので、

[email protected] % rpm -qa | grep exampleString 

second.comサーバー上:

fromServer=$(ssh -A first.com ssh second.com rpm -qa \\\| grep exampleString) 
fromServer=$(ssh -A first.com 'ssh second.com rpm -qa \| grep exampleString') 
fromServer=$("ssh -A first.com 'ssh second.com rpm -qa | grep exampleString'") 

何が起こっていることは、あなたが実行したいということです。ここではそれを回避するには3つの方法がありますサーバー:

[email protected] % ssh second.com rpm -qa \| grep exampleString 
or 
[email protected] % ssh second.com 'rpm -qa | grep exampleString' 

しかし、あなたはまだしたくないとして、再度、あなたは、それがあなたのローカルワークステーションから、first.com上で実行されている必要がありパイプの解釈を参照するには、引用/エスケープの第二の層を追加する必要があります。

[email protected] % ssh first.com "ssh second.com 'rpm -qa | grep exampleString'" 
or 
[email protected] % ssh first.com 'ssh second.com rpm -qa \| grep exampleString' 

、その後のあなたは確信していると、あなたは、変数にその全体のコマンドの出力を置くことができ、出力を得る:

グレップおそらく元のサーバー上で実行するために起こっている、あなたにsshingていませもの|あなたが
VAR=$(ssh first.com "ssh second.com 'rpm -qa | grep exampleString'") 

HTH

+0

''を追加すると、動作が変更されなかったようです。 – Nelson

+0

スラッシュは何もしていないようです。 – Nelson

+0

あなたの問題は、現在のワークステーションと 'second.com'のホストの間で解釈されたくないパイプです。なぜなら、式全体を2回引用する必要があるのですか、パイプ文字を2回エスケープする必要があるのですバックスラッシュ。 – zmo

関連する問題