ACTUALIZACIÓN: esto es un repost de How to make shell scripts robust to source being changed as they run¿Puede un script de shell indicar que sus líneas se carguen en la memoria inicialmente?
Esto es un poco lo que me cada molesta de vez en cuando:
- escribo un script de shell (bash) para un rápido y sucio trabajo
- Ejecuto el script, y se ejecuta durante bastante tiempo
- Mientras se está ejecutando, edito unas pocas líneas en el script, configurándolo para un trabajo diferente
- Pero el primer proceso sigue leyendo el mismo archivo de script y obtiene todas jodido.
Al parecer, el guión se interpreta mediante la carga de cada línea del archivo que sea necesario. ¿Hay alguna manera en que pueda hacer que el guión indique al intérprete de comandos que todo el archivo del guión debe leerse en la memoria de una vez? Por ejemplo, los scripts de Perl parecen hacer esto: editar el archivo de código no afecta un proceso que actualmente lo está interpretando (¿porque se analizó/compiló inicialmente?).
Entiendo que hay muchas formas de evitar este problema. Por ejemplo, podría intentar algo como:
cat script.sh | sh
o
sh -c "`cat script.sh`"
... aunque los que podría no funcionar correctamente si el archivo de script es grande y hay límites en el tamaño de los búferes de secuencia y argumentos de línea de comandos. También podría escribir un contenedor auxiliar que copie un archivo de script en un archivo temporal bloqueado y luego lo ejecute, pero eso no parece muy portátil.
Así que esperaba la solución más simple que implicara modificaciones solo en el script, no en la forma en que se invoca. ¿Puedo simplemente agregar una o dos líneas al comienzo del script? No sé si existe una solución así, pero supongo que podría hacer uso de la variable $ 0 ...
Este es un duplicado de http://stackoverflow.com/questions/2285403/how-to-make-shell-scripts-robust-to-source-being-changed-as-they-run – camh
Gracias, camh! Esto es perfecto. – Anonymous
Puede eliminar el script mientras se ejecuta, para evitar la edición. (Esto es probablemente lo que quiso decir [ephemient] (http://stackoverflow.com/users/20713/ephemient) y [Ryan Thompson] (http://stackoverflow.com/users/125921/ryan-thompson). Ver [ esta publicación] (http://stackoverflow.com/questions/8335747/emacs-workflow-to-edit-bash-scripts-while-they-run) por el motivo y cómo automatizarlo. –