web-dev-qa-db-ja.com

SSHパイプによるエスケープについて

次のように、長いパラメーターでawkコマンドを実行したい:

ssh Host "netstat -rn|awk 'NR!=1 && NF>=6 && $1!="Destination" {printf "%-15s %-20s\n", $1, $2}'|sort -f "

しかし、いくつかのエラーがあります:

構文エラーソース行は1です。エラーコンテキストはNR!= 1 && NF> = 6 && >>>!= <<< awk:Quitingソース行は1です。

それで、どうすれば修正できますか?

4
CatWin

here-docsを使用して、厄介なサブシェルの引用をすべて回避します。

ssh you@Host <<-\SSH
    awk -f 3<<\AWK /dev/fd/3
        awk script
        as many lines as you like
        "$vars and quotes" are only evaluated by awk
    #END
    AWK
    "$vars and quotes" are only evaluated by remote Shell
    echo 'single quotes and all'
    rest of ssh script
#END
SSH
12
mikeserv

バックスラッシュを使用して保護する$および"リモートコマンド内:

ssh Host "netstat -rn|awk 'NR!=1 && NF>=6 && \$1!=\"Destination\" {printf \"%-15s %-20s\n\", \$1, \$2}'|sort -f "
5
grebneke