GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Skript:Verwendung eines Skriptbefehls aus einem Bash-Skript zum Protokollieren einer Sitzung

Ihr Shell-Skript wurde nicht beendet. Es läuft noch. Sie erhalten eine Eingabeaufforderung, weil script spawnt eine neue Shell. Die Eingabeaufforderung, die Sie sehen, ist die Eingabeaufforderung der erzeugten Shell.

Der normale Anwendungsfall für script ist ungefähr so:

  1. starte script . dies spawnt eine neue Shell.
  2. Befehle in der neuen Shell ausführen.
  3. die Shell verlassen und zur vorherigen Shell wechseln
  4. Untersuchen Sie die von script erstellte Protokolldatei

Also im Grunde script funktioniert wie erwartet. Sie müssen einen anderen Weg finden, um das zu erreichen, was Sie wollen.

Sie können die Ausführung Ihres Skripts wie folgt protokollieren:

#! /bin/bash
exec > logfile 2>&1
set -x
FOO=BAR
echo $FOO

Erklärung:

  • exec > logfile 2>&1 leitet stdout und stderr in die Logdatei um
  • set -x lässt bash jeden Befehl ausgeben, bevor er ausgeführt wird

Beispiel:

$ ./foo.sh
  # (no output here because everything goes to logfile)
$ cat logfile 
+ FOO=BAR
+ echo BAR
BAR

Der Nachteil dieser Methode ist, dass das Skript keine für Menschen sichtbare Ausgabe ausgibt. Alles geht ins Logfile.

Alternativ können Sie es auch so machen:

#! /bin/bash
# nothing special here
FOO=BAR
echo $FOO

Dann wie folgt ausführen:

$ script -c "bash -x foo.sh"
Script started, file is typescript
+ FOO=BAR
+ echo BAR
BAR
Script done, file is typescript

jetzt ist die Ausgabe direkt sichtbar und wird auch in der Protokolldatei gespeichert (der Standardname der Protokolldatei ist 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

Ihr Bash-Skript wird noch ausgeführt, aber es hat eine neue interaktive Shell hervorgebracht. Das Bash-Skript wartet auf script zu vervollständigen, was nur geschieht, wenn die interaktive Shell beendet wird (entweder durch Beenden oder durch Eingabe von exit durch den Benutzer ).

Um den Befehl nach script zu machen von script protokolliert werden , machen Sie es so:

script build_log -c 'echo -e "* This line should appear inside the /"build_log/" log file..."'

Allerdings script wird nach Ausführung dieses Befehls nicht mehr ausgeführt.

Um mehrere Befehle innerhalb von script auszuführen , fügen Sie diese Befehle in ein anderes Bash-Skript ein und geben Sie dieses Bash-Skript als Befehl an, der zu -c ausgeführt werden soll Option.


Linux
  1. Ssh – Shell-Skript zum Einloggen in einen SSH-Server?

  2. Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

  3. Verwenden des passwd-Befehls innerhalb eines Shell-Skripts

  4. Automatisierung der Telnet-Sitzung mit Bash-Skripten

  5. Beginnend für Schleife vom zweiten Element - Shell-Skript

Einfaches Verständnis von Shell-Befehlen mit dem Skript „Explain Shell“ in Linux

Tipps zur Verwendung von tmux

Wie kann ich anhand eines Bash-Skripts feststellen, ob ich mich in einer Tmux-Sitzung befinde?

Verwenden des Bash-printf-Befehls zum Drucken formatierter Ausgaben

Verwendung der Verlaufsfunktion in Bash Shell auf Ubuntu 16.04 LTS-Server

Wie führe ich einen Befehl in einem Shell-Skript aus?