Que se passera-t-il quand je un fichier de script et enregistrez-le quand il est encore en cours d'exécution, et il imprimera mes résultats nécessaires.Que se passe-t-il lorsque je modifie un script pendant son exécution?
Répondre
Testons-le.
Créer un script test.sh
:
#!/usr/bin/env bash
sleep 1
echo 'echo "executed overwritten"' >> "$0" # append to self
sleep 1
echo 'executed original'
et l'exécuter:
$ bash --version
GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ chmod +x test.sh
$ ./test.sh
executed original
executed overwritten
$
Notez que bash
continué à lire le fichier modifié. Il conserve sa position actuelle dans le fichier (en octets) lorsque le fichier change.
En guise de démonstration, le script
#!/usr/bin/env bash
sleep 1
dd if=/dev/urandom bs=1024 count=1 of="$0" &>/dev/null # overwrite self
sleep 1
echo 'executed original'
donne la sortie
$ ./test.sh
./test.sh: line 6: syntax error near unexpected token `$'\311\262\203''
./test.sh: line 6: `��z�eп9)�v��▒y�a��44'{�d��4\:�A����˷���&�$�����l�
@(ɲ��4��OϹI�n>��7��P�M�a��X.�S�a���V�m�~O<��{}������J��$��TOtRd��Nw�&��B�Dz�▒��-��<`�P<?N��▒rT�Jq�L����JY�*hz���M�����i�⫣��S+�����\��c���m�NKV�8|��xvX}�V����PTd䊄�9��7���|��/��X��
��0¤k��_�R���e�*���(qu:UUɭp/j��n��bŇ_�UR?3▒�▒�%Rn�|DE$8�QbaK)A�{ ��O>9��A�����lt�����g)s��O��M��@���w��|�����N��,W'
avis qu'il a tenté d'exécuter le charabia aléatoire.
(Ceci est Ubuntu 12.04. Le comportement peut varier avec d'autres coquilles.)
Donc, votre réponse est en fait "oui, si vous changez le script pendant qu'il s'exécute, vous changez le script en cours"? Très cool – RandomSort
@RandomSort: Mais ne comptez pas dessus. Un code auto-modifiable de ce type est totalement impossible à maintenir. (La même chose peut être faite avec les scripts batch DOS.) –
Quand j'ai couru ceci, les premiers octets de/dev/urandom étaient 'rm -rf /;'. Est-ce typique? – ruief
- 1. Que se passe-t-il si je modifie un script Python pendant qu'il s'exécute?
- 2. Colorbox n'actualise pas son contenu lorsque je modifie une URL
- 3. le script jquery se réactualise après son exécution
- 4. Puis-je jouer un son pendant que l'iPhone dort?
- 5. Que se passe-t-il si vous modifiez une procédure stockée pendant son exécution?
- 6. Exécution d'un script pendant l'installation Debian
- 7. Un script peut-il être exécuté lorsque quelqu'un modifie son entrée de formulaire avec Google Forms?
- 8. Que se passe-t-il lorsqu'un utilisateur modifie son MySite dans un concepteur SharePoint sur MOSS?
- 9. Script Shell pendant que la boucle ne se termine pas
- 10. Un moyen d'exécuter un script bash à partir de la page Web et attraper la sortie pendant son exécution?
- 11. Comment se connecter à Outlook 2010 pendant son exécution dans C#?
- 12. Je cherche un script de son mouseover
- 13. Comment puis-je conserver un son pendant une longue période?
- 14. ce qui se passe si je modifie un script batch alors qu'il est en cours d'exécution
- 15. Que se passe-t-il lorsque je récupère un objet à partir d'une ArrayList statique et modifie ses paramètres?
- 16. Dans Google App Engine, que se passe-t-il lorsque je modifie la classe associée à un objet persistant?
- 17. Que se passe-t-il lorsque je charge un assemblage?
- 18. Que se passe-t-il pendant un appel Ajax?
- 19. Exécution d'une fonction si un script se bloque entre
- 20. Jouer son pendant onDraw
- 21. Comment puis-je réduire le volume de l'iPod pendant que mon application lit un son
- 22. Accès à un nœud Mnesia depuis un autre shell Erlang pendant son exécution
- 23. Comment arrêter la tâche céleri pendant son exécution et continuer l'exécution après un certain temps?
- 24. Comment puis-je empêcher un UISearchDisplayController de se mettre à jour pendant que je tape?
- 25. Lorsque je modifie l'arrière-plan de mon UIButton, il se redimensionne
- 26. Pourquoi une erreur Tomcat se produit-elle lorsque je modifie le fichier de clés?
- 27. Node.js se ferme lorsque je l'ouvre
- 28. script Perl est se faire tuer pendant le sommeil()
- 29. Comment puis-je valider un champ unique lorsque je modifie un objet avec sequelize
- 30. NullPointerException pendant que listview se remplit
Ne pas modifier. Si vous voulez modifier les scripts en cours d'exécution, consultez [ma réponse] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run/8926090#8926090). question [workflow Emacs pour éditer les scripts Bash pendant leur exécution] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run). (Même si Emacs n'est pas pertinent pour vous. =) –