El comando script, no solo hace un registro de los comandos que ejecuta, sino que también le permite guardar la salida generada para que pueda examinarla más tarde o convertir fácilmente sus secuencias de comandos en secuencias de comandos.
El comando script de Linux ha existido durante años y proporciona un servicio simple pero útil. Le permite registrar la actividad de la línea de comandos, tanto de entrada como de salida. Esto puede ser muy útil para solucionar problemas o verificar lo que se hizo más tarde al revisar los comandos que se ejecutaron junto con su salida.
Incluso si ha utilizado el comando script de vez en cuando, ofrece más opciones de las que muchos de nosotros creemos. En esta publicación, veremos el uso más simple del script y algunas de las opciones que pueden hacerlo aún más útil.
La forma más fácil de usar el comando script es simplemente escribir “script” en la terminal y presionar ^ d cuando desee detener la grabación. La salida, por defecto, se guardará en un archivo llamado “typescript”. Verá el nombre del archivo que se utiliza en la primera línea de salida.
$ script Script started, output log file is 'typescript'. <== file name $ who shs pts/0 2021-11-16 12:10 (192.168.0.8) $ <== after ^d exit Script done.
Especifique un nombre de archivo
Puede proporcionar un nombre más significativo si usa un comando como el que se muestra a continuación que agrega el nombre del archivo al comando:
$ script updates Script started, output log file is 'updates'. <== file name $ echo running commands running commands $ <== after ^d Exit Script done on 2021-11-16 13:30:19-05:00 [COMMAND_EXIT_CODE="0"]
El contenido del archivo de actualizaciones se vería así:
$ cat updates Script started on 2021-11-16 13:35:08-05:00 [TERM="xterm" TTY="/dev/pts/4" COLUMNS="80" LINES="24"] $ echo running commands running commands $ Exit Script done on 2021-11-16 13:35:25-05:00 [COMMAND_EXIT_CODE="0"]
Tenga en cuenta que el archivo utilizado para registrar la actividad de la sesión incluye no solo los comandos escritos y la salida generada, sino también la hora y la fecha en que comenzó y terminó la grabación del archivo.
Agregar salida a un archivo existente
Si desea agregar la grabación de la actividad de la sesión a un archivo existente, puede usar la opción -a (o –append ).
$ script -a updates
Ejecutar de forma no interactiva
Cuando usa la opción -c (o –command ), el comando de secuencia de comandos ejecuta el comando dado y de forma no interactiva.
Para ejecutar un solo comando y registrar la interacción, puede especificar el comando como se muestra a continuación que usa la opción -c (o –command ). Tenga en cuenta que se necesitan comillas si el comando requiere más de una cadena. Las horas de inicio y finalización no se incluyen en la salida cuando se utiliza esta opción.
$ script -c date Script started, output log file is 'typescript'. Thu Nov 18 03:50:06 PM EST 2021 Script done. $ $ script -c "find . -name loop -print" Script started, output log file is 'typescript'. ./bin/xtra/loop ./bin/loop ./loop ./private/loop Script done.
También puede pasar una línea de comando a un script como este:
$ echo date | script Script started, output log file is 'typescript'. date $ date Tue Nov 16 02:02:10 PM EST 2021 $ exit Script done.
Ejecutar un script de shell
En el siguiente ejemplo, usamos la opción -c para ejecutar un script y guardar la interacción en un archivo llamado “myloop”.
$ script -c bin/loop2 myloop Script started, output log file is 'myloop'. 1 2 3 4 Script done.
Separando la entrada de la salida
En algunos sistemas Linux (como Fedora), el comando de script también hace posible separar la entrada de la salida en la grabación de su sesión usando las opciones -I (o –log-in) y -O (o –log-out). Esto podría permitirle convertir los comandos guardados en un script más fácilmente, ya que estarán en un archivo sin la salida del comando.
$ script -q -I in -O out $ echo Hello, World! Hello, World!
La -I (“i” mayúscula) especifica el archivo para la entrada y la -O (“o” mayúscula) el archivo para la salida. Consulte la página del manual del script para ver qué opciones están disponibles para usted.
La opción -q (o –quiet ) evita que las horas de inicio y finalización se muestren en la salida estándar (generalmente la ventana de su terminal).
El archivo de entrada se vería así:
$ cat in Script started on 2021-11-18 16:01:58-05:00 [TERM="xterm" TTY="/dev/pts/0" COLUMNS="80" LINES="24"] echo Hello, World! Script done on 2021-11-18 16:02:06-05:00 [COMMAND_EXIT_CODE="0"]
El archivo de salida se vería así:
$ cat out Script started on 2021-11-18 16:01:58-05:00 [TERM="xterm" TTY="/dev/pts/0" COLUMNS="80" LINES="24"] $ echo Hello, World! Hello, World! $ exit Script done on 2021-11-18 16:02:06-05:00 [COMMAND_EXIT_CODE="0"]
Comprobando la versión del script
Puede mostrar la versión del script que está ejecutando así:
$ script -V script from util-linux 2.36.2
Obteniendo ayuda
Puede leer la página de manual del comando de secuencia de comandos o solicitar explicaciones sobre la sintaxis y las opciones del comando de secuencia de comandos con el comando que se muestra a continuación.
$ script -h Usage: script [options] [file] Make a typescript of a terminal session. Options: -I, --log-in <file> log stdin to file -O, --log-out <file> log stdout to file (default) -B, --log-io <file> log stdin and stdout to file -T, --log-timing <file> log timing information to file -t[<file>], --timing[=<file>] deprecated alias to -T (default file is stderr) -m, --logging-format <name> force to 'classic' or 'advanced' format -a, --append append to the log file -c, --command <command> run command rather than interactive shell -e, --return return exit code of the child process -f, --flush run flush after each write --force use output file even when it is a link -E, --echo <when> echo input (auto, always or never) -o, --output-limit <size> terminate if output files exceed size -q, --quiet be quiet -h, --help display this help -V, --version display version For more details see script(1).
Finalmente
El comando script es muy útil cuando desea recordar, revisar o volver a ejecutar una secuencia de comandos y detalles de salida en un sistema Linux. Si bien el comando history registra los comandos que ingresa, el comando script es más completo al permitirle revisar la salida del comando, así como los comandos que se ejecutaron.