Programar corretamente o comando awk do powershell sobre o plink

2

Após ( Powershell: Escapar apropriadamente apóstrofos ) eu ainda não descobri como obter essas fugas direito ao executar um comando sobre plink, vindo de powershell.

O que estou tentando executar no host linux é

df -k / | tail -1 | awk '{print $4}'

Isso só me dá a quantidade de KB livre em / .

Como estou no meu powershell (Windows), tenho que criar um comando plink para obter o comando para o servidor. Ingenuamente, parece assim:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / | tail -1 | awk '{print $4}'

Isso falha , porque o PowerShell entra no | e procura um comando tail . Então, eu tenho que escapar dos canos assim:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / '| tail -1 '| awk '{print $4}'

Isso me dá awk: cmd. line:1: Unexpected end of string .

Eu acho que tenho que escapar do $4 duas vezes, porque o PowerShell e o Bash do Linux tentam substituí-lo por uma variável. Mas como posso fazer isso? Usando

\'$4

não altera a mensagem.

    
por Bowi 01.08.2017 / 17:37

1 resposta

1

Você pode usar plink -ssh -l $user -batch -pw $pw $user@$IP "df -k / | tail -1 | awk '{print '$4}'" .

Powershell escapando em geral:

Escapando caracteres entre duas aspas duplas:

  • $ precisa ser escapado com '$
  • " precisa ser escapado com '"
  • ' precisa ser escapado com ''

Exceção:
Um trailing (no final das aspas duplas) $ não precisa ter nenhum escape.

Escape de caracteres entre duaspas simples:

  • ' precisa ser escapado com ''

Escapando caracteres que não estão entre aspas:

  • $ precisa ser escapado com '$
  • @ precisa ser escapado com '@
  • # precisa ser escapado com '#
  • ' precisa ser escapado com ''
  • | precisa ser escapado com '|
  • { e } precisam ser escapados com '{ e '}
  • ; precisa ser escapado com ';
  • " precisa ser escapado com '"
  • ' precisa ser escapado com ''

Exceção:
Um trailing (no final das aspas duplas) $ não precisa ter nenhum escape.

Especial sempre escapou de caracteres:

  • '0 : caractere nulo
  • 'a : personagem de alerta
  • 'b : caractere de retrocesso
  • 'f : personagem de feed de formulário
  • 'n : caractere de nova linha
  • 'r : Carriage-Return-Character
  • 't : caractere de tabulação horizontal
  • 'v : Vertical-Tab-Character

Formas especiais para parar a análise de caracteres especiais:

  • Desde o Powershell 2.0, você pode usar @' ... '@ para impedir a interpretação de seus parâmetros, mas @' precisa estar na mesma linha do seu comando, os parâmetros precisam estar na próxima linha e '@ precisa estar em sua própria linha após os parâmetros
  • Desde o Powershell 3.0, você pode usar --% para parar de analisar tudo depois de --%

Exemplo:

$h@h#h'h|h{h}h;h"h'h$ :

  • Entre aspas duplas: exampleprogram.exe "'$h@h#h''h|h{h}h;h'"h'h$"
  • Entre aspas simples: exampleprogram.exe '$h@h#h'h|h{h}h;h"h''h'$
  • Não está entre aspas: exampleprogram.exe '$h'@h'#h''h'|h'{h'}h';h'"h''h$
  • Usando @' ... '@ :

exampleprogram.exe @'
$h@h#h'h|h{h}h;h"h'h$
'@

  • Usando --% : exampleprogram.exe --% $h@h#h'h|h{h}h;h"h'h$
por 03.08.2017 / 15:38