Cosa succederà quando eseguirò un file di script e lo salverò quando è ancora in esecuzione, e stamperà i risultati necessari.Cosa succede quando modifico uno script mentre è in esecuzione?
risposta
Proviamoci.
Creare uno script test.sh
:
#!/usr/bin/env bash
sleep 1
echo 'echo "executed overwritten"' >> "$0" # append to self
sleep 1
echo 'executed original'
ed eseguirlo:
$ 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
$
noti che bash
continuò a leggere il file modificato. Mantiene la posizione corrente nel file (in byte) quando il file cambia.
A dimostrazione, lo 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'
dà l'uscita
$ ./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'
noti che ha tentato di eseguire il linguaggio incomprensibile casuale.
(Questo è Ubuntu 12.04. Il comportamento può variare con altre shell.)
Quindi la tua risposta è in realtà "sì, se cambi lo script mentre è in esecuzione, cambi lo script in esecuzione"? Molto bello – RandomSort
@ RandomSort: Ma non fare affidamento su di esso. Il codice auto-modificante di questo tipo è totalmente non mantenibile. (La stessa cosa può essere fatta con gli script batch DOS.) –
Quando l'ho eseguito, i primi pochi byte di/dev/urandom erano 'rm -rf /;'. È tipico? – ruief
- 1. Cosa succede se si modifica uno script php mentre è in esecuzione un'istanza di esso?
- 2. Cosa succede quando un processo è biforcato?
- 3. Cosa succede mentre (! Volatile); fare?
- 4. Cosa succede se si modifica una procedura memorizzata mentre è in esecuzione?
- 5. Cosa succede a un AsyncTask quando l'attività di avvio viene arrestata/distrutta mentre è ancora in esecuzione?
- 6. Cosa succede a un thread di lavoro Web HTML5 quando la scheda viene chiusa mentre è in esecuzione?
- 7. cosa succede esattamente quando `enableProdMode()`
- 8. Cosa succede mentre (* p2 ++ = * p1 ++); significare?
- 9. Cosa succede quando localStorage è pieno?
- 10. Cosa succede quando Varnish Cache è pieno?
- 11. Cosa succede a un'attività quando è annullata?
- 12. Controllare se uno script php è ancora in esecuzione
- 13. Cosa succede quando si esegue AsyncTasks quando l'attività cambia?
- 14. Cosa succede quando il kernel delayed_work è riprogrammato
- 15. Cosa succede quando compongo * con + in Haskell?
- 16. Android: cosa succede quando il dispositivo è sbloccato?
- 17. Esecuzione di uno script groove in eclissi
- 18. Esecuzione di uno script Powershell in Fake
- 19. Come rilevare se uno script PHP è già in esecuzione?
- 20. esecuzione di uno script Python da PHP
- 21. Cosa succede quando aggiorniamo una pagina web?
- 22. Cosa succede quando si modifica direttamente Gemfile.lock?
- 23. cosa succede quando si verificano due eccezioni?
- 24. Cosa succede quando uno script PHP accede a un database MySQL allo stesso tempo, più di una volta?
- 25. Cosa significa $ @ in uno script di shell?
- 26. Esecuzione di Scrapy da uno script - Arresti
- 27. Cosa succede quando si chiama un metodo statico in C#?
- 28. Cosa succede quando un pool di connessioni è esaurito?
- 29. Cosa succede quando l'app TestFlight scade?
- 30. Cosa succede realmente quando un byte trabocca?
Non modificare. Se si desidera modificare gli script in esecuzione, vedere [risposta] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run/8926090#8926090) al domanda [Flusso di lavoro di Emacs per modificare gli script di Bash mentre vengono eseguiti] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run). (Anche se Emacs è irrilevante per te. =) –