Jak zalogować polecenie bash z jego wyjściem?

2

Chcę rzeczywistego wiersz poleceń być zalogowani razem z jego wydajność .

Rutynowo wykonuję ważne polecenia w ten sposób:

PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save 2>&1 | tee -a my-command.log

Teraz my-command.log zawiera oba stdout i stderr z my-command.pl. Jednak tak jest nie zawierają rzeczywiste wiersz poleceń powyżej.

Wiem o bash plik historii; więc, jak sądzę, mógłbym skopiować z tego miejsca (lub z terminala) ręcznie, ale to oczywiście nie jest dobre rozwiązanie.

Myślę, że mógłbym napisać funkcję powłoki, która zaakceptowałaby wiersz poleceń, powtórzyłaby go, a następnie wykonałaby, ale wtedy musiałbym poradzić sobie z cytowaniem piekła.

próbowałem set -v ale wydaje się, że ignoruje przekierowanie.

script nie zapisuje wiersza poleceń (ale tylko wtedy, gdy rozpocznę nową powłokę, a nie za pomocą -c ) ale tak jest nie działa w buforze interakcji powłoki emacs i zapisuje również monit powłoki - w tym sekwencje specjalne! - do swojego pliku dziennika, więc jest nieoptymalny.

sds
źródło
@Zoredache: script nie zapisuje wiersza poleceń; dla moich celów nie jest lepszy niż tee -a.
sds
skrypt zapisuje wiersz poleceń AFAIK. Wykonaj „skrypt” przed wprowadzeniem polecenia i zapisze całą sesję do momentu naciśnięcia Ctrl + D.
Jim G.
@JimG .: Właśnie próbowałem; zawiera podpowiedzi powłoki i dane wyjściowe z poleceń, które wpisuję, ale nie same polecenia
sds
@sds, to bardzo dziwne. Przechowuje wszystko, co wpisuję w moim systemie, musisz robić coś niezwykłego. Spróbuj użyć ekran i włączyć tryb dziennika?
Zoredache

Odpowiedzi:

3

Spróbuj -x opcja basha:

bash -x "PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save" 2>&1 | tee -a my-command.log

Mój test:

$ bash -x -c "echo a bunch of difffernt arguments"
+ echo a bunch of difffernt arguments
a bunch of difffernt arguments
Doug Harris
źródło