Podczas uruchamiania niektórych testów muszę uruchomić szereg poleceń. Byłoby to dla mnie niezwykle przydatne i zaoszczędzić dużo czasu, gdyby istniał sposób na wykonanie tych wszystkich czynności:
- Uruchom polecenie, które muszę uruchomić
- Przekieruj wszystkie dane wyjściowe polecenia do określonego pliku
- Dołącz oryginalne polecenie do określonego pliku
- Wydrukuj dane wyjściowe z oryginalnego polecenia w terminalu
Ludzie zasugerowali użycie tee dla mnie, który świetnie wykonuje drukowanie na terminalu, a także wysyłanie do pliku, ale nie zawiera oryginalnego polecenia. Chciałbym skończyć z plikiem, w którym pierwszy wiersz to polecenie, które uruchomiłem, a poniżej to wynik polecenia.
Ktoś to zasugerował:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Ale to nie drukuje danych wyjściowych w terminalu ani nie dołącza oryginalnej komendy do pliku.
Byłbym wdzięczny za wszelkie pomysły.
command-line
Shaneoh
źródło
źródło
tee
.Odpowiedzi:
Właśnie tego
tee
szukasz.wypisuje wyjście
ls -l
na stdout (tj. terminal) i jednocześnie zapisuje je w plikuoutfile
. Ale : Nie zapisuje nazwy polecenia ani do standardowego, ani do pliku. Aby to osiągnąć, wystarczyecho
uruchomić nazwę polecenia przed uruchomieniem polecenia i potokować oba wyjścia dotee
:Uciążliwe jest pisanie, więc dlaczego nie zdefiniować funkcji?
Potem możesz po prostu biec
aby uzyskać pożądany wynik. Umieść funkcję w swoim,
~/.bashrc
aby była zdefiniowana w każdym nowym terminalu.Jeśli chcesz móc określić plik wyjściowy jako pierwszy argument jak w
zamiast tego zrób to:
Jeśli nie chcesz, aby plik wyjściowy został zastąpiony, ale raczej do niego dołączyć, dodaj
-a
opcję dotee
.źródło
Możesz skorzystać z
script
polecenia, które utworzy plik maszynopisu wszystkiego wydrukowanego na twoim terminalu. Tworzy rozwidlone muszle i będzie rejestrować wszystko, dopóki ta muszla nie zostanie opuszczona.Jeśli
cat my_output
otrzymam ten sam wynik:źródło
Możesz użyć funkcji debugowania powłoki razem z
tee
:( ... )
uruchamia podpowłokę, która pozwala „zbierać” strumienie wyjściowe wszystkich poleceń wykonanych w podpowłoce. Zawiera także efektset
polecenia poniżej dla tej podpowłoki.set -x
włączax
opcję powłoki, która drukuje wszystkie polecenia uruchamiane przez powłokę do standardowego strumienia błędów przed ich uruchomieniem.2>&1
przekierowuje strumień 2 (błąd standardowy) do strumienia 1 (standardowe wyjście).|
przekierowuje standardowy strumień wyjściowy lewego polecenia do standardowego strumienia wejściowego prawego polecenia.tee FILE
kopiuje standardowy strumień wejściowy do plikuFILE
i na standardowe wyjście.Jeśli sekwencja poleceń znajduje się już w pliku skryptu, bardziej sensowne byłoby uruchomienie go w następujący sposób:
źródło