assistir a saída de "ps aux | grep blah" no tmux não funcionará?

assistir a saída de "ps aux | grep blah" no tmux não funcionará?

Estou tentando executar isso - watch "ps aux | grep myShittyProcess"em uma sessão tmux. Este processo myShittyProcesstambém foi iniciado em uma sessão tmux. O ps auxfunciona sem comando watch. Mas assim que o coloco em observação, ele não consegue ser executado. Como fazer isso funcionar?

--editar-

Descobri que redimensionar o tmux para tela inteira faz com que funcione. Algo relacionado ao psempacotamento de saída e grepà impossibilidade de encontrar o contexto empacotado.

Responder1

Conforme mencionado na pergunta, edite eresposta do xzfc, o problema parece estar relacionado à quebra de linha do tmux. Para algo mais próximo de uma substituição imediata de ps aux | grep [q]uote, se você não precisar de informações do usuário, tente:

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

$ watch pgrep -af [q]uote

O -asinalizador faz com que a saída inclua os argumentos da linha de comando, enquanto -fpermite pesquisar os argumentos da linha de comando, bem como apenas o nome do processo.

Responder2

Correr

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

Explicação: watchdefine certas variáveis ​​ambientais adicionais, nomeadamente COLUMNSe LINES. Isso pode ser facilmente verificado comparando env | grep COLUMNSe watch 'env | grep COLUMNS'.

Quando COLUMNSé definido, pstrunca sua saída para tantos caracteres em uma linha, mesmo se a saída for canalizada grep(ou qualquer outra coisa). ( ps, Por que você faz isso comigo?). Forçar COLUMNSo vazio no watchcomando é suficiente para psfuncionar como OP (e eu) esperado.

A propósito, para evitar watchque grepprocessos façam parte da saída observada, considere adicionar []assim:

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

(Claro, eu recomendo que você pgreptambém se familiarize. Outras respostas serão úteis para isso.)

Responder3

psé um utilitário que produz resultados legíveis por humanos e confiar em texto legível por humanos é uma má ideia. Você deve usar pgrep myShittyProcessem vez de ps aux | grep myShittyProcess. pgrepproduz uma lista simples de pids e, se você quiser uma saída menos chata, pode passar pgrepa saída de para ps:

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

Para usar esse one-liner, watchvocê deve colocá-lo entre ' '(not " ") para evitar a substituição antecipada do comando shell:

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

informação relacionada