#!/usr/bin/env sh
export $NODE_CONFIG_DIR=/Users/full/path/to/script/config
cd /Users/full/path/to/script
/usr/local/bin/node main
O script é executado localmente no OSX (se eu ajustar os caminhos para o ambiente local), mas no Ubuntu eu recebo:
./mtf_runner.sh: 2: export: : bad variable name
Quero executar o script usando cron e preciso definir a NODE_CONFIG_DIR
variável de ambiente
Além disso, embora o comando seja executado no cron
OSX (10.8.5), recebo o seguinte no meu email local:
line 2: export: `=/Users/myname/Node/Development/tennistracker/config': not a valid identifier
Eu li que isso pode ser causado por um espaço ao redor, =
mas definitivamente não há espaço
#!/usr/bin/env sh
como seu interpretador de scripts não é um script bash , nem no Ubuntu , nem no Debian , nem no NetBSD .Respostas:
Isso é causado pelo fato de que, ao definir uma variável, você não deve prefixá-la com $. Aqui, o $ NODE_CONFIG_DIR é expandido para nada (como não está definido) antes de executar a linha, o que faz você executar
export =/Users/full/path/to/script/config
. O script deve serfonte
Embora o uso de evitar "$" como prefixo de variável esteja correto, há outra diferença. Nos sistemas OSX, 'sh' é 'bash'. Ou seja, é um shell do tipo Bourne. Isso pode ser verificado no Mac, basta fazer um
No Ubuntu, 'sh' é 'dash'. Dash é um shell do tipo Korn. Você também pode ver isso na página 'man' ou fazendo:
Portanto, se você deseja garantir que seus scripts ajam da mesma forma nos dois sistemas, faça um:
em vez do 'sh' normal.
fonte