Je veux exécuter mon script en arrière-plan, puis écrire son fichier pid. J’utilise nohup pour le faire.
C’est ce que j’ai imaginé,
nohup ./myprogram.sh > /dev/null 2>&1 & && echo $! > run.pid
Mais cela donne une erreur de syntaxe.
Ce qui suit ne donne pas d’erreur de syntaxe mais le problème est echo $! n’écrit pas le bon pid puisque nohup est exécuté dans un sous-shell
(nohup ./myprogram.sh > /dev/null 2>&1 &) && echo $! > run.pid
Des solutions pour cela, étant donné que je veux un seul énoncé de ligne pour y parvenir?
Vous avez déjà une esperluette après la redirection qui met votre script en arrière-plan. Par conséquent, il vous suffit de taper la commande souhaitée après cette esperluette, sans préfixer autre chose:
nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid
Cela devrait fonctionner:
nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid