後( Powershell:アポストロフィを適切にエスケープする )powershellからのplinkを介してコマンドを実行するときに、これらのエスケープを正しく取得する方法がまだわかりません。
私がLinuxホストで実行しようとしているのは
df -k / | tail -1 | awk '{print $4}'
これにより、/
での空きKBの量がわかります。
私はPowerShell(Windows)を使用しているため、サーバーにコマンドを取得するにはplink
コマンドを作成する必要があります。素朴に、それはこのように見えます:
& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / | tail -1 | awk '{print $4}'
PowerShellが|
にジャンプし、コマンドtail
を検索するため、これは失敗します。だから、私はそのようなパイプを脱出する必要があります:
& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / `| tail -1 `| awk '{print $4}'
これでawk: cmd. line:1: Unexpected end of string
が得られます。
PowerShellとLinux Bashがそれを変数に置き換えようとするため、$4
を2回エスケープする必要があると思います。しかし、どうすればそれを行うことができますか?使用する
\`$4
メッセージは変更されません。
plink -ssh -l $user -batch -pw $pw $user@$IP "df -k / | tail -1 | awk '{print `$4}'"
を使用できます。
$
は`$
でエスケープする必要があります"
は`"
でエスケープする必要があります`
は``
でエスケープする必要があります例外:
末尾(二重引用符の最後)$
はエスケープする必要はまったくありません。
'
は''
でエスケープする必要があります$
は`$
でエスケープする必要があります@
は`@
でエスケープする必要があります#
は`#
でエスケープする必要があります`
は``
でエスケープする必要があります|
は`|
でエスケープする必要があります{
と}
は`{
と`}
でエスケープする必要があります;
は`;
でエスケープする必要があります"
は`"
でエスケープする必要があります'
は`'
でエスケープする必要があります例外:
末尾(二重引用符の最後)$
はエスケープする必要はまったくありません。
`0
:ヌル文字`a
:アラート-キャラクター`b
:バックスペース-文字`f
:フォーム-フィード-文字`n
:改行文字`r
:キャリッジリターン-キャラクター`t
:水平-タブ-文字`v
:垂直-タブ-文字@' ... '@
を使用してパラメーターの解釈を防ぐことができますが、@'
はコマンドと同じ行にある必要があり、パラメーターは次の行にあり、'@
パラメータの後に独自の行にある必要があります--%
を使用して、--%
以降のすべての解析を停止できます。$h@h#h`h|h{h}h;h"h'h$
:
exampleprogram.exe "`$h@h#h``h|h{h}h;h`"h'h$"
exampleprogram.exe '$h@h#h`h|h{h}h;h"h''h'$
exampleprogram.exe `$h`@h`#h``h`|h`{h`}h`;h`"h`'h$
@' ... '@
の使用:exampleprogram.exe @ '
$ h @ h#h`h | h {h} h; h "h'h $
'@
--%
の使用:exampleprogram.exe --% $h@h#h`h|h{h}h;h"h'h$