count="/usr/bin/ps -aef|...|wc -l"
Não armazene comandos em variáveis, elas não são feitas para isso e usar o comando armazenado é difícil. Se você quiser armazenar o comando em algum lugar, use uma função:
count_procs() {
/usr/bin/ps -aef|...|wc -l
}
Uma função pode ser usada como qualquer outro comando.
O código que você mostrou irá comparar o valor dessa string em count
contra zero como um inteiro. O [
do Bash se queixaria de um valor não numérico.
O erro que você apresentou viria de um comando como ["$count" -eq 0 ]
(sem espaço entre [
e $count
), pois nesse caso, o conteúdo de count
é concatenado com [
para formar o primeira palavra da linha de comando, o nome do comando a ser executado. Embora seja bobagem fazer isso, é perfeitamente possível ter um caminho que contenha colchetes, caracteres de canal e espaço em branco.
Agora, supondo que você queira realmente executar o comando e capturar sua saída para comparar com zero, será necessário usar a substituição de comando $(...)
:
result=$(ps ... |wc -l) # save the output of the command to 'result'
ou
[ "$(ps ... | wc -l)" -eq 0 ] ... # use the command output directly in a test
Supondo que você queira contar os processos toda vez que o loop for executado, você terá que execute o comando dentro do corpo do loop. Então, por exemplo
while [ "$(ps ... | wc -l)" -eq 0 ]; do
...
done
ou, com uma função
count_procs() {
/usr/bin/ps -aef|...|wc -l
}
while [ "$(count_procs)" -eq 0 ]; do
...
done
Apenas contar os processos uma vez antes do loop tornaria a condição uma constante, e o loop repetiria indefinidamente, ou não o faria.