Por que o grep não trabalha com aspas simples?

1

Eu tenho um script bash envolto em "" então eu preciso usar '' para meu comando grep mas ele não funciona. Não consigo alterar as aspas porque as variáveis não são expandidas.

#!/bin/bash

PWD='pwd'
source "$PWD/AWS.config.sh"

SCRIPT="
cd ~/$APP_PATH;
netstat -ln | grep ':80 ' &> /dev/null;
if [ $? -eq 0 ]; then
    echo something on 80;
else
    echo nothing on 80;
fi
"
ssh -i $EC2_PEM_FILE $APP_HOST $SCRIPT

Então

netstat -ln | grep ':anyporthere ' &> /dev/null;

parece sempre retornar $? como 0 sugerindo uma correspondência quando não houver nenhum.

Como mencionei, se eu alternar para "" e "" para o script anexo, ele funciona, mas as variáveis de script não são expandidas, o que é um problema.

Por favor ajude.

    
por Alasdair P 19.03.2014 / 21:59

2 respostas

2

A variável $? no script está sendo substituída quando você atribui a variável, não no host remoto

#!/bin/bash
source "$PWD/AWS.config.sh"

ssh -i "$EC2_PEM_FILE" "$APP_HOST" << END_SCRIPT
    cd ~/"$APP_PATH"
    netstat -ln | grep -q ':80 '
    if [ \$? -eq 0 ]; then
        echo something on 80
    else
        echo nothing on 80
    fi
END_SCRIPT
  • Já existe uma variável bash chamada PWD, então você não precisa atribuir a ela.
  • Adquira o hábito de citar suas variáveis, a menos que você saiba quando não fazer isso.
  • grep -q é silencioso, mas retorna o mesmo status de saída. Mais eficiente também, porque sai imediatamente se uma correspondência for encontrada, não procurando o restante do arquivo.
  • você precisa cd apenas para executar netstat ?

Você também pode usar os operadores booleanos de curto-circuito:

ssh -i "$EC2_PEM_FILE" "$APP_HOST" "netstat -ln | grep -q ':80 ' && echo something on 80 || echo nothing on 80"
END_SCRIPT
    
por 19.03.2014 / 22:18
0

Resolvido pela concatenação de strings com citações diferentes .. bastante hacky embora. Ainda prefiro uma solução melhor

SCRIPT="
blah;
blah;
"
SCRIPT+='
this grep bit " "
'

SCRIPT+="
the rest
"

Fugly ..

    
por 19.03.2014 / 22:18