Votre script shell ne s'est pas terminé. Il est toujours en cours d'exécution. Vous recevez une invite car script
engendre une nouvelle coquille. l'invite que vous voyez est l'invite du shell généré.
Le cas d'utilisation normal pour script
est quelque chose comme ça :
- début
script
. cela génère un nouveau shell. - exécuter des commandes dans le nouveau shell.
- quittez le shell et passez au shell précédent
- examiner le fichier journal créé par
script
Donc en gros script
fonctionne comme prévu. Vous devrez trouver un autre moyen d'obtenir ce que vous voulez.
Vous pouvez enregistrer l'exécution de votre script comme ceci :
#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO
Explication :
exec > logfile 2>&1
redirige stdout et stderr vers le fichier journalset -x
fait en sorte que bash imprime chaque commande avant de l'exécuter
Exemple :
$ ./foo.sh
# (no output here because everything goes to logfile)
$ cat logfile
+ FOO=BAR
+ echo BAR
BAR
L'inconvénient de cette méthode est que le script n'imprime aucune sortie visible par les humains. Tout va dans le fichier journal.
Sinon, vous pouvez le faire comme ceci :
#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO
Exécutez ensuite comme ceci :
$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript
maintenant la sortie est directement visible et également enregistrée dans le fichier journal (le nom par défaut du fichier journal est 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
Votre script bash est toujours en cours d'exécution, mais il a généré un nouveau shell interactif. Le script bash attend script
à terminer, ce qui ne se produira que lorsque le shell interactif sera terminé (soit en étant tué, soit par l'utilisateur tapant exit
).
Pour faire la commande après script
être connecté par script
, faites comme ceci :
script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'
Cependant, script
cessera de fonctionner après avoir exécuté cette commande.
Pour exécuter plusieurs commandes dans script
, placez ces commandes dans un autre script bash et spécifiez ce script bash comme commande à exécuter sur le -c
option.