it-swarm.com.de

bei Verwendung von set -x wird die gesamte Ausgabe in einem Bash-Skript umgeleitet

Ich habe ein Bash-Skript, das set -x enthält. Ist es möglich, die Debug-Drucke dieses Skripts und seine gesamte Ausgabe in eine Datei umzuleiten? Idealerweise würde ich so etwas gerne machen:

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

und hol dir das

+ echo test
test

ausgabe in/tmp/mylog, nicht in stdout.

32
Thanos

Das ist, was ich gerade gegoogelt habe und ich erinnere mich daran, dass ich es vor einiger Zeit benutzt habe ...

Verwenden Sie exec, um sowohl die Standardausgabe als auch den Standardfehler aller Befehle in einem Skript umzuleiten:

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

Für mehr Umleitungszauber check out Advanced Bash Scripting Guide - E/A-Umleitung .

Wenn Sie die Ausgabe und das Debugging auf dem Terminal auch in Addition bis in der Protokolldatei anzeigen möchten, finden Sie weitere Informationen unter COPY von stdout in die Protokolldatei innerhalb von bash script selbst umleiten .

Wenn Sie das Ziel der set -x trace-Ausgabe unabhängig von der normalen STDOUT und STDERR behandeln möchten, finden Sie weitere Informationen unter bash, wobei die Ausgabe von set -x in der Protokolldatei gespeichert wird.

50
bcelary

die -x-Ausgabe wird an stderr übergeben.

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

In meinem Fall wurde das Skript mehrmals von einer anderen Stelle aufgerufen, und ich habe nicht alles gesehen. Deshalb habe ich stattdessen einen Anhang erstellt, und es hat funktioniert:

exec 1>>FILENAME 2>&1
set -x

Um Verwechslungen zu vermeiden, müssen Sie vor jedem Lauf den Dateinamen löschen.

1
calamari

stderr und stdout umleiten:

exec &>> $LOG_FILE_NAME

Wenn Sie an eine Datei anhängen möchten. Datei überschreiben:

exec &> $LOG_FILE_NAME
0
PALEN