Su script de shell no finalizó. Todavía está funcionando. Estás recibiendo un aviso porque script
está generando un nuevo caparazón. el indicador que ve es el indicador del shell generado.
El caso de uso normal para script
es algo como esto:
- iniciar
script
. esto genera un nuevo caparazón. - hacer comandos en el nuevo shell.
- salir del shell y pasar al shell anterior
- examinar el archivo de registro creado por
script
Así que básicamente script
está funcionando como se esperaba. Tendrás que encontrar otra forma de lograr lo que quieres.
Puede registrar la ejecución de su secuencia de comandos de esta manera:
#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
Explicación:
exec > logfile 2>&1
redirige stdout y stderr al archivo de registroset -x
hace que bash imprima cada comando antes de ejecutarlo
Ejemplo:
$ ./foo.sh
# (no output here because everything goes to logfile)
$ cat logfile
+ FOO=BAR
+ echo BAR
BAR
La desventaja de este método es que el script no imprime ningún resultado para que lo vean los humanos. Todo va al archivo de registro.
Alternativamente, puedes hacerlo así:
#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO
Luego ejecuta así:
$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
ahora la salida es directamente visible y también se guarda en el archivo de registro (el nombre predeterminado del archivo de registro es typescript
)
$ cat typescript
Script started on Mi 18 Mai 2011 01:05:29 CEST
+ FOO=BAR
+ echo BAR
BAR
Script done on Mi 18 Mai 2011 01:05:29 CEST
Su secuencia de comandos bash aún se está ejecutando, pero ha generado un nuevo shell interactivo. El script bash está esperando script
para completar, lo que solo sucederá cuando finalice el shell interactivo (ya sea porque el usuario lo eliminó o si el usuario escribe exit
).
Para hacer el comando después de script
ser registrado por script
, hazlo así:
script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
Sin embargo, script
dejará de ejecutarse después de ejecutar ese comando.
Para ejecutar múltiples comandos dentro de script
, coloque esos comandos dentro de otro script bash y especifique ese script bash como el comando para ejecutar en el -c
opción.