Angeben eines Protokollnamens für die Bildschirmausgabe ohne Verwendung von .screenrc


7

In einem Bash-Skript verwende ich "screen -L", um ausgeführte Befehle in Farbe zu protokollieren. Zum Beispiel:

screen -L tree

Dann lesen wir die Logdatei mit less -R.

Wenn dieses Skript ausgeführt wird, werden möglicherweise andere Bildschirme ausgeführt, sodass wir nicht wissen, welches Screenlog. * Unsere Ausgabe enthält. Ich kann nicht verlangen, dass der Benutzer sein / ihr anpasst .screenrc.

Gibt es eine Möglichkeit, einen Protokollnamen in der Befehlszeile anzugeben oder bestimmte .screenrcBefehle zu lesen ?


siehe meine Antwort hier: stackoverflow.com/questions/14208001/…
lepe

Antworten:


12

Ich habe ein paar Gedanken dazu. Beachten Sie zunächst, dass Sie den Startbildschirm steuern können, wenn Sie den Bildschirm über den -cBefehlszeilenschalter aufrufen . Zweitens können Sie Umgebungsvariablen in Ihrem .screenrc verwenden. Wenn Sie dies alles zusammenfassen, finden Sie hier ein Shell-Skript, mit dem Sie so etwas wie das tun können, was Sie wollen:

#!/bin/bash

cat << EOF >/tmp/screenrc.$$
logfile /tmp/screenlog.$$
EOF

screen -c /tmp/screenrc.$$ -L
rm /tmp/screenrc.$$

echo "logfile is /tmp/screenlog.$$"

Dieses Skript überschreibt den Benutzer screenrc und platziert die Ausgabe in einer bestimmten Datei. In diesem Fall $$generiere ich den Dateinamen durch Anhängen des Skriptprozessnamens. Beachten Sie, dass Sie im Allgemeinen mktempstattdessen sichere temporäre Dateien erstellen sollten, aber ich bin gerade faul.

Auch dies ersetzt den Benutzer vollständig .screenrc. Wenn Sie weiterhin Einstellungen aus dieser Datei lesen möchten, sollten Sie die generierte Konfigurationsdatei folgendermaßen ändern:

logfile /tmp/screenlog.$$
source $HOME/.screenrc

2

Verwenden:

tree -C > tree.log

Die -COption erzwingt die Farbe auch dann, wenn die Ausgabe nicht auf tty erfolgt.

Ähnlich:

ls -l --color=always > ls.log
grep --color=always foo bar > grep.log
ack --color foo > ack.log

Dienstprogramme, die Farben ausgeben, haben häufig Möglichkeiten, sie zu erzwingen, wenn die Ausgabe an eine Pipe gesendet oder umgeleitet wird.


Nach dem erneuten Lesen der Frage habe ich den Verdacht, dass so etwas mehr sein könnte, als wirklich benötigt wird.
Phil Hollenback

1

Alternativ gibt es eine Möglichkeit, dies online zu tun.

Geben Sie den Befehl Modus in Bildschirm über Ctrl+ A, :und verwenden Sie den logfileBefehl mit dem Namen der Datei , die Sie als Argument wollen:

logfile whatevernameyoulike.log

Quelle: Manpage zum Bildschirm

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.