Ir ao conteúdo
  • Cadastre-se

Depois da execução, a console fica doida...


andunno

Posts recomendados

Bom dia pessoal.

Estou precisando da ajuda de vocês.

Eu acabei de elaborar um script para criar/remover regras de acesso ao SMTP.

Fiz alguns teste e aparentemente o script está funcionando, ou seja, fazendo o que ele deveria fazer porém após a execução desse script a console onde ela foi executada não aceita mais nenhum comando. Se por exemplo eu der um ls aparece uma mensagem informando que o comando não foi encontrado.

Sou então obrigado a abrir uma nova console.

Segue abaixo conteúdo do script.

# Configurando as variaveis

BYTES1='"3145728"'

BYTES2='"8388608"'

DATE=`date +%d%m%y`

FILE=' qmail-smtpd.rules'

PATH='/var/qmail/control'

PATH1='/backup/smtpd_rules'

RULE=':allow,RELAYCLIENT="",LOGLEVEL="1024",WHITELISTED="",AUTHREQUIRED="",NOPBS="",SMTPAUTH="",DATABYTES='

/usr/bin/clear

# Fazendo backup do arquivo original

/bin/cp -f "$PATH"/"$FILE" "$PATH1"/"$FILE"."$DATE"

if [ "$?" != 0 ]

then

echo "Erro na geração do backup"

echo "Saindo..."

exit

fi

# Criando uma copia do arquivo original

/bin/cp -f "$PATH"/"$FILE" /tmp/"$FILE".tmp

if [ "$?" != 0 ]

then

echo "Erro na geração do temporario"

echo "Saindo..."

exit

fi

export op1=0

while [ "$op1" -lt 1 -o "$op1" -gt 3 ]

do

/usr/bin/clear

/bin/echo -e "

+---------------------------------------------+

| |

| MANUTENCAO DO ARQUIVO QMAIL-SMTPD.RULES |

| |

+---------------------------------------------+

OPCAO ACAO

===== ====

1 INCLUIR DATABYTES

2 EXCLUIR DATABYTES

3 TERMINA

Entre com a opcao desejada: \c"

read op1

done

if [ "$op1" = 3 ]

then

exit

fi

echo

echo -e "Digite o endereco IP: \c"

read ip

case $op1 in

1) export op2=0

while [ "$op2" -lt 1 -o "$op2" -gt 2 ]

do

/usr/bin/clear

echo -e "

+---------------------------+

| |

| SELECIONE O DATABYTES |

| |

+---------------------------+

OPCAO TAMANHO

===== =======

1 3Mb

2 8Mb

Entre com a opcao desejada: \c"

read op2

done

case $op2 in

1) echo

echo "$ip""$RULE""$BYTES1" >> /tmp/"$FILE".tmp

/bin/cp -f /tmp/"$FILE".tmp "$PATH"/"$FILE"

;;

2) echo

echo "$ip""$RULE""$BYTES2" >> /tmp/"$FILE".tmp

/bin/cp -f /tmp/"$FILE".tmp "$PATH"/"$FILE"

;;

esac

if [ $? = 0 ]

then

echo "Regra criada com sucesso!!!"

else

echo "Erro na criacao da regra"

echo "Saindo..."

exit

fi

;;

2) /bin/grep -v "$ip" /tmp/"$FILE".tmp > /tmp/"$FILE".tmp1

if [ $? = 0 ]

then

echo

echo "Regra removida com sucesso!!!"

else

echo

echo "Problema na remocao da regra"

echo "Saindo..."

exit

fi

/bin/cp -f /tmp/"$FILE".tmp1 "$PATH"/"$FILE"

;;

esac

# Recriando as tabelas SMTP

/sbin/service qmail cdb

Alguém poderia me ajudar a entender o que está acontecendo?

Link para o comentário
Compartilhar em outros sites

como pude observar no seu script,

ao invés de voce usar

echo "oi"

voce usa:

/usr/bin/echo "oi"

isso é desnecessario ... Alem disso, não existe nenhum "echo" ou "ls" em /usr/bin .. Apenas em /bin ...

conserte isso no seu script e talvez dara certo

Link para o comentário
Compartilhar em outros sites

Bom dia amigo,

Neste caso eu passo o caminho completo onde o comando está localizado para evitar qualquer tipo de problema com relação ao sistema não conseguir encontrar o comando. Já tive problema desse tipo em scripts anteriores.

Agora com relação ao meu problema, consegui resolver... foi mó mancada minha.

No script eu estava utilizando a variável $PATH e como eu estava executando o script com dot (.) o valor da variável $PATH, do shell pai, estava sendo substituído pelo valor que eu estava passando pelo script.

De qualquer forma, valeu pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Só um "diquinha"...

Como você não quer ter dores de cabeça sobre onde estão os binarios de alguns comandos... Acho que seria legal usar o resulto do comando "which" como a variável... Visto que em algumas distros os binários estão em locais diferentes... Desta maneira seu script torna-se "portável".

Até mais...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...