GNU/Linux >> Tutoriales Linux >  >> Linux

Script bash:usar el comando de script desde un script bash para iniciar sesión

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:

  1. iniciar script . esto genera un nuevo caparazón.
  2. hacer comandos en el nuevo shell.
  3. salir del shell y pasar al shell anterior
  4. 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 registro
  • set -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.


Linux
  1. Usando Bash para la automatización

  2. ¿Cómo saber si estoy en una sesión Tmux desde un script Bash?

  3. Usando el comando passwd desde dentro de un script de shell

  4. Abra Vim desde dentro de un script de shell Bash

  5. iniciando apachectl desde bash

Comprender fácilmente los comandos de Shell usando el script "Explain Shell" en Linux

Consejos para usar tmux

Uso del comando Bash printf para imprimir salidas formateadas

Uso de la función de historial en Bash Shell en el servidor Ubuntu 16.04 LTS

¿Cómo ejecutar un comando en un script de Shell?

¿Cómo ejecutar un comando varias veces, usando bash shell?