Czy istnieje prosty sposób na zarejestrowanie całej aktywności ze skryptu powłoki do pliku?
Mam scenariusz Wyświetla rzeczy takie jak „instrukcje” echa, a także inne dane wyjściowe programu. Znam polecenia:
command | tee -a "$log_file"
i
command >> logifle.log
Pytam o to, czy istnieje parametr powłoki do logowania, polecenie set, którego mogę użyć, czy coś takiego. Niekoniecznie chcę dodawać dziesiątki przekierowań lub tee do plików, jeśli nie muszę. Nadal chcę uzyskać wyjście standardowe - chcę też, aby zostało zarejestrowane .:wq
Odpowiedzi:
jeśli normalnie uruchamiasz skrypt przy pomocy
foo.sh
, spróbuj go uruchomić (zakładając, że jest to skrypt bash) przy pomocybash -x foo.sh
. Jeśli chcesz, aby wszystko zostało przekierowane do pliku, spróbujbash -x foo.sh > file.log 2>&1
(pamiętaj, że przekierowuję również stderr, usuń,2>&1
jeśli tego nie chcesz). Jeśli chcesz zobaczyć, co się dziejebash -x foo.sh 2>&1 | tee log.file
.źródło
Istnieje bardzo łatwy i wygodny sposób:
Używanie
script
do tworzenia maszynopisu sesji terminalowejUruchom polecenie
script
Jeśli argument
file
jest podany, na przykładscript ~/tmp/output
,script
zapisuje dialog w tym pliku. Jeśli nie podano nazwy pliku, dialog jest zapisywany w plikutypescript
Uruchom skrypt lub cokolwiek chcesz zacząć
Jeśli skrypt jest zakończony, zatrzymaj się
script
za pośrednictwem Ctrl-DSprawdź dane wyjściowe w domyślnym pliku wyjściowym
typescript
Aby rozpocząć polecenie w jednym kroku
script
, użyj parametru-c
Użycie
script
wewnętrznego skryptu nie ma sensu, ponieważscript
rozwidla powłokę lub uruchamia nową powłokę.źródło
script logfilename
, więc mogę to wybrać.script
przydaje się również monitorowanie za pośrednictwem fifo. Fromman script
: „-f, --flush
Opróżnij wyjście po każdym zapisie. Jest to miłe dla współpracy telefonicznej: jedna osoba robimkfifo foo; script -f foo
, a druga może nadzorować w czasie rzeczywistym, co się robi za pomocącat foo
”. Może być również używany do monitorowania, gdy program czeka na dane wejściowe lub jest wykonywany, na przykład przez monitorowanie znacznika czasu fifo.