2016-04-05 22 views
0

sshコマンドを使ってsshコマンドを[1]としてsshコマンドに渡そうとしましたが、動作しません。 私は 'ssh ld3646'のようなホストにsshを行います。私のコンソールでは、入力します。sshコマンドでsedを渡す

ssh ld3646 'sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs' 

ファイル/ etc/sysconfig/nfsはまったく変更されていません。それは私が 'ssh ld3646'と入力すると動作します。

sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs' 

誰かがなぜうまくいかないのですか?

+0

これをチェックしてください:http://gt-dev.blogspot.com/2015/05/bash-ssh-how-to-invoke-command-remotely.html –

答えて

0

二重引用符が2組あることに注意してください。それは動作しません。一重引用符はネストしません。幸いにも、引用符の外側のセットは必要ではありません。

ssh ld3646 sed -i 's/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' /etc/sysconfig/nfs 
0

引用の混乱があります。

sedスクリプトの直前の引用符は、sedで始まる引用符付きの文字列を終了します。

ネストされた引用符を扱うためのいくつかの戦略をthis answerに提供しましたが、これは啓蒙の可能性があります。まさにこの問題を回避するために埋め込まれた二重引用符をエスケープしていることを

ssh ld3646 "sed -i 's/USE_KERNEL_NFSD_NUMBER=\"4\"/USE_KERNEL_NFSD_NUMBER=\"64\"/g' /etc/sysconfig/nfs" 

注:お使いの場合には、簡単な戦略は、引用符を変更するだけかもしれません。

視覚的簡素化するためのもう1つのオプションは、変数を使用するようになります。

sedscript='s/USE_KERNEL_NFSD_NUMBER="4"/USE_KERNEL_NFSD_NUMBER="64"/g' 
ssh ld3646 "sed -i '$sedscript'" 

二重引用符で囲まれた文字列に埋め込まれた単一引用符は変数展開をブロックしないので、この最後の作品。

関連する問題