problema de script unix

3

Eu tenho um script simples que roda em uma máquina FreeBSD com o seguinte código:

#!/bin/sh
'sed -i .bak '\:#start 172.0.0.3:,\:#end 172.0.0.3:d' /usr/local/etc/racoon/racoon.conf'
echo $?

Deve eliminar um bloco de texto entre os dois padrões.

O problema é que se eu executar o comando sed diretamente do shell ele funciona, se eu executar o script, o código de retorno será 0.

Por que isso?

    
por Darie Nicolae 18.06.2010 / 15:07

2 respostas

7

Você precisa eliminar os backticks e alterar as aspas simples para aspas duplas:

#!/bin/sh
ip=$1
echo $ip
sed -i .bak "\:#start ${ip}:,\:#end ${ip}:d" /usr/local/etc/racoon/racoon.conf

O uso de aspas duplas permitirá que as variáveis sejam expandidas. Os backticks tentariam executar a saída padrão do comando (o que não existe neste caso). Por exemplo, se você fizesse 'echo hi' , ele tentaria executar "hi" como um comando. sed sempre retorna 0 a menos que haja um erro, independentemente de uma substituição ter sido feita.

    
por 18.06.2010 / 15:33
1

Os backticks realmente não são necessários (ou talvez eu entenda errado). O fato de que o script retorna 0 também é esperado: o código de saída 0 é OK. Edit: sed sempre sairá com 0, mesmo que não tenha havido nenhuma substituição. Outro código de saída só é gerado quando há um erro na sua sintaxe.

Mais interessante é: o código é excluído ou não?

A julgar pelos seus comentários, você provavelmente tem um problema com o regexp e / ou com caracteres que escapam dele.

    
por 18.06.2010 / 15:13

Tags