2013-03-22 8 views
5

sshを使用してリモートコマンドでエスケープシングルクォートの解決法を読んだ。しかし、どんな仕事でも。単一引用符をエスケープするsshリモートコマンド

私はawkの

ssh [email protected] "ps uax|grep bac | grep -v grep | awk \'{ print $2 }\' > /tmp/back.tmp" 
.... 
awk: '{ 
awk:^caracter ''' inválido en la expresión 

を仕事とコマンド上の単一のクォータを入れても動作しませんしないでください

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print $2 }' > /tmp/back.tmp" 

をしようとしています。また

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print \$2 }' > /tmp/back.tmp" 
                   ▲ 

、あなたが使用することができます:そう

ps uax | grep 'ba[c]' | ... 

Apreciteはそうあなたが$文字をエスケープする必要がありますが、二重引用符"を使用してみてくださいあなたの最初で

答えて

7

を助ける

grep -v grepのステップは必要ありません。

+0

Wauuuuu ...多くの感謝...この質問のために余りにも多くの時間を費やして...良い一日 – abkrim

8

sshコマンドは、実行するリモートコマンドとしてホスト名の後に入力されたすべてのテキストを処理します。クリティカルには、これがあなたの質問に何を意味するかということは、あなたがしたようにコマンド全体を引用する必要はないということです。むしろ、リモートシステム自体のように入力するだけで、コマンドを送信することができます。

これは、使用する必要がある引用符の数を減らすため、引用の問題の処理を簡略化します。引用符を使用しないので、すべての特殊なbash文字をバックスラッシュでエスケープする必要があります。

あなたの状況では、あなたが

ssh [email protected] ps uax \| grep ba[c] \| \'{ print \$2 }\' \> /tmp/back.tmp 

、入力する必要がありますまたはあなたがそれらをエスケープするのではなく、引用符、単一引用符を倍増でき

ssh [email protected] ps uax \| grep ba[c] \| "'{ print \$2 }'" \> /tmp/back.tmp 
(両方のケースでは、あなたはドル記号をエスケープする必要があります)

これはちょっと複雑だと感じましたが、私はこの知識が、リモートシステムにコマンドを送るときに、より複雑な引用符を使用することにかなり価値があることを発見しました。

関連する問題