Zapisz polecenie Wyjście terminala w OSX

0

To jest proste pytanie, ale nie mógł znaleźć odpowiedzi, znalazłem i próbowałem tee output.txti system_profiler > output.txtale bez powodzenia, oszczędzają pusty plik tekstowy. Jak zapisać dane wyjściowe terminala za pomocą polecenia w terminalu w systemie OSX El Capitan?

hzleonardo
źródło
Twoje polecenie powinno działać dobrze. Proszę zobaczyć moją przetestowaną odpowiedź.
BloodyEl
Tak, masz rację, czekałem około 1-2 minut, a plik tekstowy nie jest już pusty, ale nie zapisuje danych wyjściowych, zapisuje szczegóły aplikacji. Mówię osystem_profiler > output.txt
hzleonardo
„system_profiler> output.txt” ma dokładnie taki sam efekt jak „system_profiler”, z wyjątkiem tego, że jest zapisany w pliku. „System_profiler -xml> output.txt” wydrukuje w formacie xml, który jest czasem użyteczny, ale nie jest tym, czego szukasz. Czy możesz pokazać mi różnicę między „system_profiler” a plikiem z: „system_profiler> output.txt”? Używam dokładnie takiej samej składni jak ty. Otrzymuję dokładnie to samo, oczekiwany wynik.
BloodyEl
Czegoś brakuje. Albo anulujesz polecenie w połowie, albo nie jesteś zadowolony z oryginalnego wyjścia „system_profiler”, ponieważ jest ono bez drukowania. Niezależnie od tego, czy drukujesz do pliku, czy nie, wynik jest ogromny. Jeśli chcesz ograniczyć wyniki tylko do pierwszego akapitu, użyj „system_profiler --timout 5> output.txt”, a to się zatrzyma. To nie jest problem z drukowaniem. Wyjaśnij, w jaki sposób wynik w pliku różni się od wyniku na ekranie. POTWIERDŹ, ŻE NIE WYSYŁASZ SIGKILL [CTRL-C] itp., Ponieważ wtedy nie robimy tego samego.
BloodyEl
Tak, robię CTRL-C. Kiedy to robię, nie ma problemu przy ręcznym zapisywaniu danych wyjściowych terminala, dlaczego miałoby to być problem z komendą?
hzleonardo

Odpowiedzi:

1

Zakładając, że commandto polecenie, które chcesz uruchomić, możesz przesłać dane wyjściowe do pliku output.txt, używając:

$ command > output.txt

lub

$ command | tee output.txt

Jeśli to nie piekło, może to wynikać z faktu, że wydruk nie jest drukowany, stdoutale włączony stderr. Potok >jest niejawnym zapisem, dla 1>którego oznacza „potok stdoutdo ...”.
Jeśli chcesz także potokować stderrdo pliku, możesz użyć

$ command >output.txt 2>&1

To stderrpowoduje przesyłanie wszystkich danych wyjściowych do deskryptora pliku 1(= stdout), który z kolei jest przesyłany do pliku tekstowego.

Larkey
źródło
Nie mam komputera Mac, ale każda powłoka, którą kiedykolwiek widziałem, zawiera wyraźne (tj. Inne niż potok) przekierowania w podanej kolejności, więc potrzebujesz >output 2>&1. Alternatywnie w bash możesz użyć &>outputlub >&outputzrobić oba jednocześnie; zobacz stronę manuala.
dave_thompson_085
Używam OSX tylko na maszynie wirtualnej, moim podstawowym systemem jest Linux - a każda powłoka, której użyłem, działa na dwa sposoby.
larkey
Nie dwa Linuxy, których obecnie używam: na Ubuntu (14) z bashlub dash, robi cat bad 2>&1 >outputwysyłając komunikat o błędzie do tty i nic do pliku; CentOS (6) bashlub dashczy ksh93takie same, a przy tcshtym daje błąd Ambiguous output redirection. Czy możesz podać przykład, który mogę pobrać (na x86-64) lub połączyć się z tym działaniem dla tego formularza?
dave_thompson_085
Wciąż pusty plik tekstowy i bez powodzenia, może to być problem z El Capitan? Czy jesteś na najnowszym el capitan?
hzleonardo
@ dave_thompson_085 Właśnie zauważyłem, że używam tylko tego, command 2>&1 | tee output.txtco działa w ten sposób, ale masz rację, bo >tak nie jest. Nigdy nie zauważyłem Oo
larkey
0

Syntex:

$command > /output/file/location

Przykład: załóżmy, że chcesz wyświetlić listę wszystkich plików i katalogów / home / jackson i zapisać wynik w /home/jackson/list.txt, więc polecenie będzie:

$ls /home/jackson > /home/jackson/list.txt

ale pamiętaj, jeśli plik /home/jackson/list.txt już istnieje i zawiera informacje, wówczas poprzednie polecenie usunie poprzednie informacje i zapisze dane wyjściowe polecenia. więc jeśli nie chcesz usunąć wcześniejszych informacji, użyj „>>” zamiast „>”. tak będzie twoje polecenie.

$ls /home/jackson >> /home/jackson/list.txt

Mam nadzieję, że to pomoże ..

Pankaj Jackson
źródło
Czy jestem jedynym, który robi coś złego? Widzę te polecenia wszędzie, ale to nie działa, czekałem, wciąż pusty plik tekstowy. Czy jesteś el capitan 10.11.5?
hzleonardo
0

P: Jak zapisać dane wyjściowe terminala za pomocą polecenia w terminalu w systemie OSX El Capitan?

Odp .: Po prostu daj komputerowi wystarczająco dużo czasu na wykonanie tego konkretnego polecenia (około 30 minut).

Twoje polecenie powinno działać bez problemu.


Na moim komputerze Mac polecenie:

system_profiler > output.txt

.. Wykonanie zajmuje około 1m30s.


Profiler systemu ma również opcje formatowania i limit czasu, jeśli jest to pożądane.

system_profiler -xml -timeout 3 > textfile.xml
cat ./textfile.xml

Odniesienie:

man system_profiler
system_profiler -usage

Wynik (z nl, aby policzyć numery linii). Ten plik jest taki sam jak polecenie i ma około 52000 linii.

system_profiler> output.txt nl output.txt

     1  Accessibility:

     2      Accessibility Information:

     3        Cursor Magnification: Off
     4        Display: Black on White
     5        Flash Screen: Off
     6        Mouse Keys: Off
     7        Slow Keys: Off
     8        Sticky Keys: Off
     9        VoiceOver: Off
    10        Zoom Mode: Full Screen
...
...

 51937            Wake On Wireless: Supported
 51938            AirDrop: Supported, Channel 0
 51939            Status: Off
BloodyEl
źródło
Tak, dla mnie ten sam wynik, którego nie chcę. Próbuję wykonać polecenie „Eksportuj tekst jako” w menu powłoki za pomocą polecenia. Kiedy robię to ręcznie, jest ok, drukuje tylko z terminala w pliku tekstowym w ciągu sekundy, ale z poleceniami, pustym plikiem lub tym wyjściem w tekście po 1-2 minutach.
hzleonardo