Script bash do Ubuntu: o shell está mudando sem nenhum motivo

0

Estou tendo um comportamento estranho com um script de shell no Ubuntu 12.04.1 LTS.

Meu script está programado para ser lançado a cada hora (no crontab). Ele usa / bin / bash, mas às vezes muda para / bin / sh sem nenhum motivo.

Aqui estão algumas partes do comando env que estou registrando no script.

O correto é:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/jdk/jdk1.6.0_35/bin

O errado que às vezes ocorre é:

SHELL=/bin/sh
PATH=/usr/bin:/bin

O problema é que estou perdendo a variável PATH e recebo um erro quando tento executar um comando.

Alguma dica? Obrigado!

    
por Angelo Cavallini 20.11.2012 / 11:00

3 respostas

2

É difícil dizer por que às vezes funciona e às vezes não. Então, aqui estão algumas idéias que podem ou não ajudar.

Verifique se o seu script começa com

#!/bin/bash

e verifique se o script foi executado com o usuário correto: Isso fará com que o bash carregue o ambiente correto para esse usuário.

Se você quiser ter certeza, também é possível executar explicitamente bash no seu crontab e, em seguida, passar o script para ser executado com o argumento -c .

Se isso não ajudar e você precisar de uma solução rápida, poderá optar por executar os comandos no script usando o caminho completo, para não precisar do PATH correto.

Nota: Esta questão se encaixaria melhor na falha do servidor ou no Unix e no Linux.

    
por 20.11.2012 / 11:18
0

Coloque isso no início do seu script:

#!/bin/bash
if [ "$(readlink -f /proc/$$/exe)" != "/bin/bash" ] ; then
    echo restarting script with bash... > &2
    exec /bin/bash $0 "$@"
fi
    
por 20.11.2012 / 14:11
0

A variável SHELL é o shell de login, não necessariamente o shell no qual você está executando atualmente.

O motivo mais provável para as diferenças é que às vezes você está executando a partir de um shell interativo e, às vezes, não (cron), em cada caso, os arquivos de inicialização executados são diferentes.

Quando você executa no cron, ele não é um shell de login, portanto, o seu .profile não está sendo executado - o motivo mais provável pelo qual seu PATH é diferente.

No início do seu script, coloque:

source ~/.profile

(ou use . em vez de source )

    
por 20.11.2012 / 21:18