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:
- inizia
script
. questo genera una nuova shell. - esegui i comandi nella nuova shell.
- esci dalla shell e passa alla shell precedente
- 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 logset -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.