GNU/Linux >> Linux Esercitazione >  >> Linux

Script bash:utilizzo del comando script da uno script bash per la registrazione di una sessione

Il tuo script di shell non è terminato. È ancora in esecuzione. Ricevi una richiesta perché script sta generando un nuovo guscio. il prompt che vedi è il prompt della shell generata.

Il caso d'uso normale per script è qualcosa del genere:

  1. inizia script . questo genera una nuova shell.
  2. esegui i comandi nella nuova shell.
  3. esci dalla shell e passa alla shell precedente
  4. esamina il file di log creato da script

Quindi sostanzialmente script sta funzionando come previsto. Dovrai trovare un altro modo per ottenere ciò che desideri.

Puoi registrare l'esecuzione del tuo script in questo modo:

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

Spiegazione:

  • exec > logfile 2>&1 reindirizza stdout e stderr al file di log
  • set -x fa in modo che bash stampi ogni comando prima di eseguirlo

Esempio:

$ ./foo.sh
  # (no output here because everything goes to logfile)
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

Lo svantaggio di questo metodo è che lo script non stampa alcun output visibile agli utenti. Tutto va nel file di log.

In alternativa puoi farlo in questo modo:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

Quindi esegui in questo modo:

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript

ora l'output è direttamente visibile e anche salvato nel file di log (il nome predefinito del file di log è 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

Il tuo script bash è ancora in esecuzione, ma ha generato una nuova shell interattiva. Lo script bash è in attesa di script da completare, cosa che accadrà solo quando la shell interattiva verrà terminata (sia per essere ucciso, sia per l'utente che digita exit ).

Per eseguire il comando dopo script essere registrato da script , fallo così:

script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'

Tuttavia, script smetterà di funzionare dopo aver eseguito quel comando.

Per eseguire più comandi all'interno di script , inserisci questi comandi all'interno di un altro script bash e specifica quello script bash come comando da eseguire al -c opzione.


Linux
  1. Esegue lo script bash dall'URL

  2. automatizzare la sessione telnet utilizzando gli script bash

  3. A partire da Loop dal secondo elemento - script Shell

  4. Esegui il comando bash sulla pipeline jenkins

  5. Esegui uno script di shell dal comando docker-compose, all'interno del contenitore

Comprendere facilmente i comandi della shell utilizzando lo script "Explain Shell" in Linux

Utilizzo di Bash per l'automazione

Suggerimenti per l'utilizzo di tmux

Utilizzo del comando Bash printf per la stampa di output formattati

Utilizzo della funzione di cronologia su Bash Shell su Ubuntu 16.04 LTS Server

Come eseguire un comando in uno script della shell?