Eu tenho um script pai
while read cmd
do
nohup ./script ${cmd[@]} &>> log &
done < ~/list
que executa este script filho
while true
do
eval "${CMD[@]}"
#${CMD[@]}
#./panic
done
com esta lista de comandos
node ~/www/splash/app.js
node ~/www/splash-two/app.js
Quando o script filho chama eval ${CMD[@]} , ele é executado da maneira que eu esperava executando esse comando sem queixas, mas quando tento remover o eval e executar o comando usando ${CMD[@]} ele gera o erro:
Error: Cannot find module '/home/rumplefraggle/SYS/RABBOT/~/www/splash/app.js'
Agora eu pensei que possivelmente isso tinha algo a ver com o comando node, então eu tentei executar
ls ~
como o comando e lança o erro que ~ não pode ser encontrado.
Ecoando ${@} e não executando, expande como eu esperava.
Também inserir manualmente o comando no script filho também funciona como esperado
Eu não entendo porque eval funciona e simplesmente executando o comando usando ${@} não. O que está causando ${@} para não expandir o ~ ?
Por que o nó está anexando o nome do diretório ao comando quando ${@} é usado?