2010-05-15 11 views
14

Uruchomiłem zadanie w interfejsie CLI, które monituje mnie o dane wejściowe tak/nie.Jak potokować dane wyjściowe polecenia do pliku na Linuksie

Po wybraniu opcji duża liczba informacji przewija się na ekranie - w tym kilka błędów. Chcę potokować to wyjście do pliku, aby można było zobaczyć błędy. Proste ">" nie działa, ponieważ polecenie oczekuje wejścia klawiatury.

Używam wersji Ubuntu 9.1.

+0

Jaka jest nazwa tego polecenia? robić? – Cristina

Odpowiedz

1

Użyj 2> zamiast tylko .

1

Jeśli program został napisany przez rozsądną osobę, to czego prawdopodobnie potrzebujesz, to stderr, a nie standardowe wyjście. Można by to osiągnąć za pomocą mniej więcej tak

foo 2> errors.txt

37
command &> output.txt 

Można użyć &> przekierować zarówno stdout i stderr do pliku. Jest to skrót nazwy command > output.txt 2>&1, gdzie 2>&1 oznacza "wysyłaj stderr do tego samego miejsca co standardowe wyjście" (stdout jest deskryptorem pliku 1, stderr jest 2).

Dla poleceń interaktywnych zwykle nie przeszkadza zapisywanie do pliku, jeśli mogę użyć less i odczytać wyniki od razu:

command 2>&1 | less 
+1

Przekierowanie zarówno stdout, jak i stderr do pliku oznacza, że ​​nie zobaczy on faktycznego monitu. Nie widzę, jak by mu się lepiej powodziło niż sytuacja, którą opisuje w swoim pytaniu. – Epcylon

+0

Użyłeś 'i' po obu stronach liczb ('1',' 2'). Czy używasz 'i 2' lub' 2 & ', nawet' 2 &> 1' lub '2> i 1' robi jakąkolwiek różnicę? –

+0

@FredrickGauss Ups! W mojej odpowiedzi miałem literówkę. '2 &> 1' jest nieprawidłowe. Chciałem napisać "2> i 1". –

4
echo yes | command > output.txt 

W zależności od tego, jak komenda odczytuje to wejście (niektóre programy odrzuć wszystko, co było na stdin, zanim wyświetli się monit, ale większość tego nie robi), to powinno działać w każdym zdrowym środowisku CLI.

+1

Myślę, że masz na myśli 'echo yes | command' zamiast 'command <\\ echo yes \' '. (Istnieje również polecenie 'yes', które może być przydatne.) –

+0

Masz rację.Zacząłem myśleć, że mógłby umieścić swój plik w pliku, i zmieniłem zdanie, aby zamiast tego używać zamiast niego echa, ale zapomniałem zmienić linię poleceń, aby pasowały. Naprawiono to teraz. – Epcylon

+0

To zmienia format jsona. Niestety, chciałem napisać plik. – metanerd

1

można użyć opcji 2> do wysyłania błędów do pliku.

przykład:

komenda 2> error.txt

(użycie opcji 2>) --- sprawdzić, czy ich byłoby żadnego błędu, gdy wykonanie polecenia to wyśle ​​go do pliku error.txt.

Powiązane problemy