Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
andunno

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

Recommended Posts

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?

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×