Você tem o seguinte código:
pids = 'ps U "$name" -o pid | head -n -1'
bash é exigente quanto ao espaço em branco, aqui. Simplesmente remova os espaços de pids = ...
e funcionará como pretendido:
pids='ps U "$name" -o pid | head -n -1'
Estou trabalhando em um script para excluir usuários do arquivo de texto. No entanto, antes de excluir, quero verificar se algum processo de um usuário está sendo executado e, se estiver em execução, mate todos os processos e exclua. Aqui está como eu estou fazendo isso:
if
#user doesn't exists then print user not exist
else
pids = 'ps U "$name" -o pid | head -n -1'
if [ -n "$pids" ]
then
for pid in $pids
do
sudo kill -KILL $pid
done
fi
sudo userdel
$name -r -f
echo
echo "The user - $name - has been deleted!"
echo
fi
done < "$fname" # double-quote fname
echo
Portanto, basicamente é um loop para excluir usuários e uma declaração if para garantir que nenhum processo está sendo executado por um usuário e, se estiver sendo executado, forçar processos de fechamento e excluir usuário.
No entanto, não está funcionando e diz pids: command not found
.. Alguma solução, como consertar?
Poucas coisas:
1) Você não pode ter um espaço ao redor da atribuição de variável =
no shell script. pids = ...
deve ser pids=...
.
2) kill
pode aceitar vários PIDs. Você não precisa de um loop for pid in $pids ...
. (embora com o próximo item, isso é irrelevante)
3) Seu código pode ser simplificado drasticamente fazendo:
pkill -KILL -U "$name"
Não há necessidade de verificar se o usuário tem algum processo em execução. Se não houver, o comando não faz nada.
Tags bash shell-script