Appeler une fonction en utilisant nohup
Je suis en train d'appeler une fonction à l'aide de nohup
comme ceci:
function1(){
while true
do
echo "function1"
sleep 1
done
}
nohup function1 &
# ...... some other code
mais peut-être la fonction n'est pas vu par nohup
et j'obtiens cette erreur:
nohup: failed to run command `function1' : No such file or dictionary
Je ne veux pas créer un nouveau fichier sh pour ma fonction. Comment puis-je résoudre ce problème?
source d'informationauteur sajad
Vous devez vous connecter pour publier un commentaire.
Une autre solution:
nohup
s'applique aux commandes et pas de fonctions de script.Par exemple, le script (dire func.sh) qui contient fonction1() doit appeler la fonction:
Maintenant appeler le script func.sh avec
nohup
en arrière-plan -:Si vous avez besoin de désactiver le signal de raccrochage dans le script, utilisez le shell intégré
trap
. L'exemple ne tient pas compte SIGHUP, mais peut être utilisé pour ignorer les autres (par exemple, SIGINT).J'ai trouver une solution qui fonctionne pour moi - définir la fonction dans un fichier (par exemple,
.functions
), puis exécutez la fonction avec nohup:nohup bash -c "source .functions; function1" &
Testé sur Ubuntu 13.04.
Depuis
nohup
doit être fourni avec un nom de fichier, pas une fonction comme une solution de contournement, c'est ce qui peut être fait:Lorsque ce script est appelé avec les arguments courants:
`echo "$@" | grep -q -- "--nohup"
retournera une erreur d'état de sortenohup $0 "$@" --nohup &
sera invoqué, ce qui permettra d'appeler ce script en passant les arguments courants et un nouvel argument--nohup
Et lorsque ce script est appelé avec un argument
--nohup
`echo "$@" | grep -q -- "--nohup"
sera de retour à zéro de l'état (succès) doncfunction1
sera invoquéeOui ! Il est possible cependant délicate, et strictement bash > v2 compatible :
Et n'oubliez pas "composé" est bash dépréciée en faveur de "déclarer" (même si je ne suis pas entièrement d'accord avec cela).