7
votes

Shell Script: exécuter la commande après avoir exécuté la commande "EXIT" dans le script shell

J'ai une situation où j'ai une commande dans mon script shell qui doit être exécuté après une commande sortie est exécutée dans le même script ( je sais !! Ça semble fou! ! )

Je veux trouver une solution pour quelque chose comme xxx

ici je veux la commande toucher ~ / abc.txt Exécuter après Quitter $? a exécuté et la commande touch ~ / abc.txt peut être une commande.

Contraintes: 1) Je ne peux pas modifier le Quitter $? partie du script ci-dessus. 2) La commande doit être exécutée uniquement après la sortie $? commande.

Je ne sais pas s'il y a une solution pour cela, mais toute aide est appréciée.


4 commentaires

Pouvons-nous savoir pourquoi vous ne pouvez pas modifier ces premières lignes?


Pardon!! J'ai édité les contraintes une partie de ma question maintenant. Je peux changer quelque chose dans le script mais la commande de sortie doit rester !!


Si vous ne pouvez pas modifier le script, comment vous attendez-vous à ajouter la commande touche ? Si vous peut Modifiez le script, pourquoi ne pouvez-vous pas l'ajouter au-dessus du Quitter ?


Cela ne mène nulle part où vous n'essayez évidemment d'essayer de changer de symptômes au lieu de traiter le problème. Qu'essayez-vous d'atteindre? Pourquoi voulez-vous faire cela ?


4 Réponses :


0
votes

Je doute que la voie directe est possible de quelque manière que ce soit.

Mais il pourrait y avoir une solution de contournement: pouvez-vous envelopper le script d'exécution dans un autre processus? Ensuite, vous pouvez appeler tout ce que vous voulez dans le script d'emballage une fois que le script enveloppé a exécuté sa sortie () et est retiré de la pile.


0 commentaires

1
votes

Je ne sais pas pourquoi vous voulez faire quelque chose comme ça, mais peut-être essayer quelque chose comme ceci: enveloppez votre script dans un autre. Dans votre script parent, évaluez votre script enfant avec une commande comme Eval ou Source, puis extrayez de votre dernière commande de script enfant et l'exécute séparément de la même manière.


5 commentaires

Autant que je veux, je ne peux pas utiliser un wrapper sur mon script car je modifie le script "tcruntime-ctl.sh" de Vfabric Tcserver.


Je suis obligé de modifier uniquement ce script maintenant! :(


@Latestversion Pourquoi ne pouvez-vous pas modifier celui-ci?


@Latestversion C'est une idée folle mais peut-être mettre cette commande d'évaluation dans le même script. Quelque chose comme exécuté (toutes les autres lignes de ce script), puis exécutant la dernière.


Je ne peux pas gâcher certaines parties du script et de la sortie $? est l'un d'entre eux. J'ai une situation où je reçois une "sortie" lorsque ce Quitter $ $? est excité. Cette "sortie" générée n'est pas sous mon contrôle et fait partie d'un programme Java. Maintenant, je veux pouvoir exécuter une commande après la sortie $? est exécutée et doit faire partie du même script que je suis contraint d'introduire quoi que ce soit d'autre dans le projet. Je suis attaché!!



10
votes

L'approche typique consiste à définir un piège: xxx

Ceci sera appelé la commande tactile lorsque la coque se ferme. Dans certaines obus (par exemple, bash ), le piège sera également exécuté si le script se termine comme le résultat d'un signal, mais dans d'autres (par exemple, Dash ). Il n'y a pas de moyen portable d'appeler la commande uniquement si la dernière commande était Quitter .


0 commentaires

0
votes

Cela devrait fonctionner, même si OP ne voulait pas déplacer la sortie.

#!/bin/sh
ls -l ~/.
RES=$?     #save res for later.
touch ~/abc.txt
exit $RES


0 commentaires