web-dev-qa-db-fra.com

redirige toutes les sorties dans un script bash avec set -x

J'ai un script bash qui contient set -x. Est-il possible de rediriger les impressions de débogage de ce script et toutes ses sorties vers un fichier? Idéalement, j'aimerais faire quelque chose comme ceci:

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"

et obtenir le

+ echo test
test

sortie dans/tmp/mylog, pas dans stdout.

32
Thanos

C'est ce que je viens de googler et je me souviens de l'avoir utilisé il y a quelque temps ...

Utilisez exec pour rediriger à la fois la sortie standard et l'erreur standard de toutes les commandes d'un script:

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1

Pour plus de vérification magique de la redirection Guide de rédaction avancée de scripts Bash - Redirection I/O .

Si vous souhaitez également voir la sortie et le débogage sur le terminal dans addition dans le fichier journal, voir rediriger COPY de stdout vers le fichier journal depuis le script bash lui-même .

Si vous souhaitez gérer la destination de la sortie de trace set -x indépendamment des STDOUT et STDERR normales, voir bash stockant la sortie de set -x dans le fichier journal .

50
bcelary

la sortie de -x va dans stderr, donc pour la journaliser faire:

set -x
exec 2>/tmp/mylog
13
Petesh

Pour rediriger stderr et stdout :

exec &>> $LOG_FILE_NAME

Si vous souhaitez ajouter au fichier. Pour écraser le fichier:

exec &> $LOG_FILE_NAME
0
PALEN