¿Qué sucederá cuando guarde un archivo de script y lo guarde cuando todavía esté en ejecución, y se imprimirán los resultados necesarios?¿Qué sucederá cuando edite un script mientras se está ejecutando?
Respuesta
Vamos a probarlo.
Crear un script test.sh
:
#!/usr/bin/env bash
sleep 1
echo 'echo "executed overwritten"' >> "$0" # append to self
sleep 1
echo 'executed original'
y ejecutarlo:
$ 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
$
en cuenta que bash
continuó leyendo el archivo modificado. Mantiene su posición actual en el archivo (en bytes) cuando el archivo cambia.
Como muestra, la secuencia de comandos
#!/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'
da la salida
$ ./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'
en cuenta que se ha intentado ejecutar el galimatías aleatorio.
(Esto es Ubuntu 12.04. El comportamiento puede variar con otros shells.)
Entonces su respuesta es realmente "sí, si cambia el guión mientras se está ejecutando, ¿cambia el guión en ejecución"? Muy bueno – RandomSort
@RandomSort: Pero no confíes en él. Este código de modificación automática de este tipo es totalmente imposible de mantener. (Lo mismo se puede hacer con los scripts por lotes de DOS.) –
Cuando ejecuté esto, los primeros bytes de/dev/urandom fueron 'rm -rf /;'. Es eso típico? – ruief
- 1. ¿Qué sucederá si modifico un script de Python mientras se está ejecutando?
- 2. Editar script de shell mientras se está ejecutando
- 3. ¿Es seguro recompilar un ejecutable mientras se está ejecutando?
- 4. ¿Qué iniciador se está ejecutando?
- 5. Compruebe si un script php todavía se está ejecutando
- 6. jQuery funciona en Firefox cuando Firebug se está ejecutando, no funciona cuando Firebug NO se está ejecutando
- 7. ¿Qué sucede con un hilo de trabajador web HTML5 cuando la pestaña se cierra mientras se está ejecutando?
- 8. Notificación en Phonegap mientras la aplicación no se está ejecutando
- 9. actualización R paquetes mientras R se está ejecutando
- 10. ¿Cómo continuar ejecutando un script de Python mientras se muestra un diagrama/figura?
- 11. Cargando imagen gif mientras jQuery ajax se está ejecutando
- 12. Cambiar un archivo por lotes cuando se está ejecutando
- 13. ¿Continuar script si solo se está ejecutando una instancia?
- 14. BroadcastReceiver cuando la aplicación no se está ejecutando
- 15. Cómo determinar por qué un script de Greasemonkey no se está ejecutando
- 16. ¿Cómo maneja MATLAB el cambio de archivo mientras se está ejecutando el archivo?
- 17. ¿Por qué el servicio de datos WCF funciona mejor mientras se está ejecutando Fiddler?
- 18. Restricciones mientras kernel está ejecutando una rutina ISR
- 19. Cómo mostrar un gif de carga significa mientras se está ejecutando un formulario de envío JQuery
- 20. Muestra los resultados mientras el script aún está ejecutándose
- 21. ¿Cómo reconocer si un script se está ejecutando en un tty?
- 22. ¿Qué sucede cuando un hilo se interrumpe mientras se bloquea en una espera()?
- 23. ¿Cómo puede un script de Ruby detectar que se está ejecutando en irb?
- 24. Notificación de inserción mientras la aplicación no se está ejecutando - launchOptions dictionary está vacío
- 25. ¿Cómo puedo averiguar qué script PHP se está ejecutando en Linux?
- 26. La interceptación de la salida estándar de un subproceso mientras se está ejecutando
- 27. HttpWebRequest no funciona, excepto cuando se está ejecutando fiddler
- 28. Periodictask no se está ejecutando
- 29. ¿Se está ejecutando un subproceso en iOS?
- 30. ¿Cuándo sucederá esto?
No edite. Si desea modificar las secuencias de comandos en ejecución, consulte [mi respuesta] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run/8926090#8926090) a la pregunta [Flujo de trabajo de Emacs para editar scripts Bash mientras se ejecutan] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run). (Incluso si Emacs es irrelevante para usted. =) –