Adicione um grep adicional à string, mas use a opção invert para remover todos os pedidos de saída do grep:
ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt | grep -v grep
Estou usando o Mac OS X, o que significa que eu não tenho (por exemplo) pgrep / pkill, mas eu quero algo assim (eu também não uso o macports / fink - homebrew é minha ferramenta de pacote Unix de escolha - para que os pacotes não façam isso).
Eu quero encontrar e matar uma instância de ssh com parâmetros específicos - basicamente, um túnel de encaminhamento de porta ssh remoto específico. O comando que eu usaria é algo assim:
ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt
No entanto, às vezes esse comando grep é exibido na saída, portanto, a sequência de comandos atual não é útil como está escrita.
Existe uma ferramenta para o Mac OS X que eu possa usar para fazer isso?
O truque é enganar o grep para não se encontrar.
... | grep "[s]sh" | ...
Também pode usar o awk:
ps axuwww | awk '!/grep/ && /ssh/ && /remote-host/ && /port-forwarding-stmt/'
Os argumentos 'www' para ps (1) dizem para exibir a linha de comando completa, ao invés de uma versão abreviada.
ps -a -o pid, command | awk '(/[s]sh/ && /remote-host/ && /port-forwarding-stmt/){ print $1}'
combina algumas das idéias declaradas. A parte -o
especifica que apenas imprimimos pid e commandline, e print $1
imprime apenas a parte pid. O [s]sh
faz com que ele não se encontre (truque legal!)
Tags bash mac unix macos shell-script