просмотр вывода "ps aux | grep blah" в tmux не сработает?

просмотр вывода "ps aux | grep blah" в tmux не сработает?

Я пытаюсь запустить это - watch "ps aux | grep myShittyProcess"в сеансе tmux. Этот процесс myShittyProcessтакже был запущен в сеансе tmux. ps auxРаботает без команды watch. Но как только я помещаю его в watch, он не выполняется. Как заставить это работать?

-- редактировать -

Обнаружено, что изменение размера tmux на весь экран заставляет его работать. Что-то связано с psобертыванием вывода и grepневозможностью найти в обернутом контексте.

решение1

Как упоминалось в вопросе редактирования иответ xzfc, проблема, похоже, связана с переносом строк в tmux. Для чего-то более близкого к замене в виде вставки ps aux | grep [q]uote, если вам не нужна информация о пользователе, попробуйте:

$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote

$ watch pgrep -af [q]uote

Флаг -aвключает в вывод аргументы командной строки, а также -fпозволяет выполнять поиск как по аргументам командной строки, так и только по имени процесса.

решение2

Бегать

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

Объяснение: watchзадает некоторые дополнительные переменные env, а именно COLUMNSи LINES. Это можно легко проверить, сравнив env | grep COLUMNSи watch 'env | grep COLUMNS'.

Если COLUMNSустановлено, psобрезает вывод до указанного количества символов в строке, даже если вывод передается по конвейеру grep(или куда-либо еще). ( ps, зачем вы так со мной поступаете?). Принудительного указания COLUMNSпустого значения внутри watchкоманды достаточно, чтобы заставить psработать так, как ожидал OP (и я).

Кстати, чтобы избежать включения процессов watchи grepв отслеживаемый вывод, рассмотрите возможность добавления []следующего:

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"

(Конечно, я бы рекомендовал вам ознакомиться с pgrepэтим. Другие ответы будут вам полезны.)

решение3

psэто утилита, которая производит вывод, понятный человеку, и полагаться на grepping текста, понятного человеку, плохая идея. Вы должны использовать pgrep myShittyProcessвместо ps aux | grep myShittyProcess. pgrepпроизводит голый список pid, и если вы хотите менее скучный вывод, вы можете передать pgrepвывод в ps:

ps -opid,user,args -p `pgrep myShittyProcess`

Чтобы использовать эту однострочную команду, watchее следует заключить в ' '(not " "), чтобы предотвратить раннюю подстановку команд оболочки:

watch 'ps -opid,user,args -p `pgrep myShittyProcess`'

Связанный контент