¿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?
13
A
Respuesta
20
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.)
+4
Entonces su respuesta es realmente "sí, si cambia el guión mientras se está ejecutando, ¿
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. =) –