Bonjour tout le monde,
Je pose ce problème qui va paraître curieux à certains mais dont je ne sais même pas s'il existe une solution.
Voici le contexte :
J'écris un script (bash ou sh) interactif (donc qui pose des questions et... qui attend des réponses).
J'aimerai que ce script enregistre tous les dialogues générés par ce script (les "echo", "read" et les résultats des commandes) dans un fichier .log
Or bien évidemment si je redirige le script vers un fichier, je perds l'interactivité !
Ma question est donc : y a-t-il un moyen d'avoir simultanément l'affichage des dialogues dans le terminal et leurs copies dans un fichier ?
Ca peut paraître simple, mais je ne vois pas comment faire, voir si c'est même possible.
Exemple concret : un petit script d'installation de nodejs.
#!/bin/sh
# name: install_nodejs.sh
#
echo "\nHello $USER\n"
echo -n "Do you want to download nodejs: (Y/n) [Default No]? "; read -p "" GETNODE
case $GETNODE in
'Y'|'y')
echo "\nDownloading nodejs...\n"; wget -O node-v0.8.25.tar.gz http://nodejs.org/dist/v0.8.25/node-v0.8.25.tar.gz;;
*)
echo "\nGoodbye."; exit;;
esac
case $GETNODE in
'Y'|'y')
echo -n "Do you want to install nodejs right now: (Y/n) [Default No]? "; read -p "" INSTALLNODE;;
esac
if [ "$INSTALLNODE" = "Y" ] || [ "$INSTALLNODE" = "y" ]
then
echo "\nPlease be patient since the install can last up to 10 minutes.\n"
sleep 3
tar -xzf node-v0.8.25.tar.gz
cd node-v0.8.25
./configure
make clean
make
echo "\nLet the CPU cool down a little bit...\n"
sleep 45
sudo make install
cd ..
echo "\nThe installation is done.\nGoodbye."
else
echo "\nYou can install nodejs later using the following commands:\n"
echo "tar -xzf node-v0.8.25.tar.gz"
echo "cd nodejs-v0.8.25"
echo "./configure"
echo "make clean"
echo "make"
echo "sudo make install"
echo "cd ..\n"
echo "Goodbye."
fi
Si je lance le script normalement par la commande "./install_node.js", alors j'ai dans la console :
fnux@VM-precise-64 ~ $ ./test-node.sh
Hello fnux
Do you want to download nodejs: (Y/n) [Default No]?
Et là, je peux répondre par Y (ou y) pour lancer le téléchargement et par n'importe quoi d'autre pour sortir du script et idem pour la seconde question si j'ai répondu "Y" (ou "y") à la première question.
Mais si je lance le script en redirigeant la sortie vers nodejs.lg par la commande "./install_node.js > nodejs.log" alors même la première question n'apparait pas (logique).
Comme je sais ce qu'il se passe, si je répond par Y (ou par y) à la première question et non à la seconde (qui elle non plus ne s'affiche pas à la fin du téléchargement - normal), alors j'ai dans la console :
fnux@VM-precise-64 ~ $ ./test-node.sh > node.log
Y
--2013-07-09 19:45:01-- http://nodejs.org/dist/v0.8.25/node-v0.8.25.tar.gz
Resolving nodejs.org (nodejs.org)... 165.225.133.150
Connecting to nodejs.org (nodejs.org)|165.225.133.150|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12850173 (12M) [application/octet-stream]
Saving to: `node-v0.8.25.tar.gz'
100%[======================================>] 12,850,173 86.4K/s in 1m 57s
2013-07-09 19:46:59 (108 KB/s) - `node-v0.8.25.tar.gz' saved [12850173/12850173]
N
fnux@VM-precise-64 ~ $
Et le fichier nodejs.log est celui ci :
Hello fnux
Do you want to download nodejs: (Y/n) [Default No]?
Downloading nodejs...
Do you want to install nodejs right now: (Y/n) [Default No]?
You can install nodejs later using the following commands:
tar -xzf node-v0.8.25.tar.gz
cd nodejs-v0.8.25
./configure
make clean
make
sudo make install
cd ..
Goodbye.
Mais la réponse "Y" à la première question, la partie qui s'est affichée dans la console (le téléchargement), et la réponse à la deuxième question ne sont pas dans ce fichier log.
Et c'est encore pire (pour moi) si je réponds "Y" (ou y) aux deux questions.
Dans la console, après le téléchargement, je n'ai alors que les "warning" de l'installation de nodejs dont voici un extrait
fnux@VM-precise-64 ~ $ ./test-node.sh > node.log
y
--2013-07-09 19:56:26-- http://nodejs.org/dist/v0.8.25/node-v0.8.25.tar.gz
Resolving nodejs.org (nodejs.org)... 165.225.133.150
Connecting to nodejs.org (nodejs.org)|165.225.133.150|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12850173 (12M) [application/octet-stream]
Saving to: `node-v0.8.25.tar.gz'
100%[======================================>] 12,850,173 251K/s in 53s
2013-07-09 19:57:20 (238 KB/s) - `node-v0.8.25.tar.gz' saved [12850173/12850173]
y
../deps/openssl/openssl/crypto/x509/x509_vfy.c: In function ‘X509_verify_cert’:
../deps/openssl/openssl/crypto/x509/x509_vfy.c:156:13: warning: variable ‘xn’ set but not used [-Wunused-but-set-variable]
../deps/uv/src/ares/ares_options.c: In function ‘ares_set_servers_csv’:
../deps/uv/src/ares/ares_options.c:187:9: warning: ignoring return value of ‘strtol’, declared with attribute warn_unused_result [-Wunused-result]
bla bla bla
../deps/uv/src/unix/ev/ev.c:1358:12: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result]
../deps/uv/src/unix/ev/ev.c:1365:12: warning: ignoring return value of ‘read’, declared with attribute warn_unused_result [-Wunused-result]
../deps/uv/src/unix/linux/linux-core.c: In function ‘read_cpufreq’:
../deps/uv/src/unix/linux/linux-core.c:487:9: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result]
../deps/zlib/contrib/minizip/zip.c:196:12: warning: ‘free_linkedlist’ defined but not used [-Wunused-function]
fnux@VM-precise-64 ~ $
Ce qui ne sert pas à grand chose, et je vous passe le détail du fichier log qui fait plus de 2.000 lignes mais qui commence et se termine comme ça :.
Hello fnux
Do you want to download nodejs: (Y/n) [Default No]?
Downloading nodejs...
Do you want to install nodejs right now: (Y/n) [Default No]?
Please be patient since the install can last up to 10 minutes.
{ 'target_defaults': { 'cflags': [],
'default_configuration': 'Release',
'defines': [],
'include_dirs': [],
'libraries': []},
make[1]: Leaving directory `/home/fnux/node-v0.8.25/out'
ln -fs out/Release/node node
bla bla bla
Let the CPU cool down a little bit...
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory `/home/fnux/node-v0.8.25/out'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/fnux/node-v0.8.25/out'
ln -fs out/Release/node node
python tools/install.py install
installing /usr/local/include/node/ares.h
bla bla bla
installing /usr/local/lib/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
symlinking ../lib/node_modules/npm/bin/npm-cli.js -> /usr/local/bin/npm
updating shebang of /usr/local/bin/npm to /usr/local/bin/node
The installation is done.
Goodbye.
Ce qui ne me sert à rien.
Alors, suis-je devant un cas insoluble ou y a-t-il une solution ?
J'ai recherché longtemps sur différents forum mais je n'ai rien trouvé.
Merci d'avance de toute aide.