Rurociągi do grep


30

Próbuję uruchomić stracekoryto ccze, a rura nie działa zgodnie z oczekiwaniami.

Wiersz poleceń, który uruchamiam do przetestowania sudo strace -p $(pgrep apache2) | grep open, i wszystkie wiersze są wypisywane, ignorując grep.

Czy jest w tym coś wyjątkowego, co stracepowoduje takie zachowanie?

Odpowiedzi:


48

stracedrukuje swoje ślady na standardowym błędzie, a nie na standardowym wyjściu. Jest tak, ponieważ często chce się przekierowywać standardowe wyjście programu, ale zazwyczaj nie jest to problem, że stderr strace i stderr programu są pomieszane.

Powinieneś więc przekierować stracestderr na stdout, aby móc go potokować:

sudo strace -p $(pgrep apache2) 2>&1 | grep open

poza tym, że tak naprawdę szukasz

sudo strace -p $(pgrep apache2) -e open

to działa!! Dziękuję Ci! - Właściwie to nie próbowałem patrzeć tylko na openpołączenia, po prostu podałem to jako przykład, tak naprawdę staram się wyróżniać kolory
Andrei

Dostaję strace: Invalid process id: '-e'ostatnie polecenie. Jestem w wersji 4.8. 30.03.2010.
Elijah Lynn

Achh, faktycznie mam httpd (RHEL).
Elijah Lynn

1
@ElijahLynn Zamień apache2na nazwę interesującego Cię procesu. Sprawdź, czy pgrepdrukuje pojedynczy PID, w przeciwnym razie wybierz jeden i uruchom np.sudo strace -p 1234 -e open
Gilles 'SO- przestań być zły'

@Andrei, a co z używaniem vimpodświetlania składni kolorów? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
Pablo A
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.