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?

Andrei
źródło

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
Gilles „SO- przestań być zły”
źródło
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