трубопровід на грейп


30

Я намагаюся пропустити straceкорито ccze, і труба не працює, як очікувалося.

Командний рядок, який я запущу для тестування sudo strace -p $(pgrep apache2) | grep open, і всі рядки виводяться, ігноруючи grep.

Чи є щось особливе, straceщо викликає таку поведінку?

Відповіді:


48

straceдрукує свої сліди на стандартній помилці, а не на стандартному виведенні. Це тому, що зазвичай хочеться перенаправляти стандартний вихід програми, але зазвичай це не проблема, коли страдер stderr і stderr програми змішуються.

Тому вам слід перенаправити stracestderr на stdout, щоб мати можливість передавати його:

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

за винятком того, що ви справді шукаєте

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

це працює!! Дякую тобі! - Я насправді не намагався дивитись лише на openдзвінки, я просто ставлю це як приклад, те, що я насправді намагаюся зробити, це виділення кольорів
Андрій

Я отримую strace: Invalid process id: '-e'з останньою командою. Я на версії 4.8. 2010-03-30.
Ілля Лінн

Ах, у мене фактично є httpd (RHEL).
Ілля Лінн

1
@ElijahLynn Замініть apache2на ім’я процесу, який вас цікавить. Перевірте, чи pgrepдрукується один PID, інакше виберіть його та запустіть, наприкладsudo strace -p 1234 -e open
Жил 'SO- перестаньте бути зла'

@Andrei, як щодо використання vimпідсвічування синтаксису кольорів? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
Пабло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.