Parece que nohup
não é possível executar comandos que tenham variáveis de ambiente antes deles. Por exemplo,
nohup LD_PRELOAD=~/file.so ./run &
diz
nohup: failed to run command 'LD_PRELOAD=/home/mahmood/file.so': No such file or directory
Na verdade, file.so
existe, mas não é um comando. Como posso corrigir isso?
Configurando uma variável como esta
é uma parte da sintaxe do shell. A atribuição deve ser antes do comando.
No seu caso, o shell não reconhece
LD_PRELOAD=~/file.so
como uma atribuição. É apenas um argumentonohup
enohup
não suporta variáveis de configuração como esta.Se você estiver em um shell (e provavelmente está porque
~/
e&
também precisa de um shell), pode colocar a variável no ambiente denohup
, ela será herdada:Mas isso obviamente pode afetar a
nohup
si mesmo. Se você não estiver em um shell e/ou não quiser que a variável esteja no ambiente denohup
, diganohup
para executar um shell que interpretará a sintaxe:Aqui eu usei explicitamente
exec
porque após a atribuição não precisamos mais do shell. Eu acredito que alguns shells executam o último comando implicitamente (pelo menos em algumas circunstâncias), alguns podem não.