Exportando um comando canalizado sem avaliar a saída?

0

Estou tentando definir um export que seria efetivamente kill de um processo baseado no PID que pgrep o alimenta. A execução do comando kill $(pgrep myAppName) parece funcionar (se 'myAppName' era o nome de um processo em execução real) ... Mas como você salvaria esse comando como uma variável de ambiente exportada? Cada variação do comando que eu conseguia pensar parece tentar avaliar pgrep myAppName em algo como 20137 (ou um valor PID similar), e executar a variável exportada funciona pela primeira vez, mas obviamente não funcionará depois disso já que o comando exportado é na verdade kill 20137 , onde esse processo já foi finalizado.

Como posso fazer com que isso seja salvo corretamente em uma variável, então posso digitar algo como $KILL_APPNAME para matar esse processo, toda vez que o comando for executado?

    
por RectangleEquals 21.03.2015 / 09:01

1 resposta

2

O que eu acho que você está tentando fazer precisa de eval para funcionar:

THING="eval kill \$(pgrep myAppName)"
$THING

mas é desajeitado e não funciona por padrão em todos os shells (por exemplo, ele não funciona por padrão em zsh , embora uma opção possa ser configurada para que funcione). Tudo o que você está tentando fazer é provavelmente melhor resolvido com algo mais limpo e fácil como uma função:

kill_my_app() {
    kill $(pgrep myAppName)
}
kill_my_app

Ou, como outros apontaram nos comentários, use apenas pkill ou killall , que faz exatamente o que você precisa.

    
por 21.03.2015 / 09:53