Vejo muitos exemplos sobre como verificar se o usuário existe no sistema *nix usando id
Para testar meu código criei um código simples e após verificar e verificar o trabalho copiei para desenvolver o script
verificaruser.sh
#!/usr/bin/env bash
function checkUser() {
if id "$USER" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
}
USER=$4
checkUser
Código de teste
sudo local/checkuser.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim.EXISTS
user exists
Mas quando a cópia no meu script não funciona
#!/usr/bin/env bash
if [ $EUID != 0 ]; then
sudo "$0" "$@"
exit $?
fi
SITE=$1
PHP=$3
USER=$4
NGINX=/etc/nginx/
FPM=/etc/php/${PHP}/fpm/pool.d/
PATH=$5
checkUser
Código de teste
sudo local/deploy_site.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim
user does not exist
Responder1
PATH
está no ambiente, éespecial. Depois que seu script for executado PATH=$5
, ele não será mais capaz de encontrar o id
executável; portanto isso
id "$USER" >/dev/null 2>&1
falha silenciosamente.
Você provavelmente não deseja sobrescrever PATH
. Você provavelmente quersuas variáveis em letras minúsculas.
No entanto, se vocêrealmentedeseja substituir PATH
, posteriormente você deverá usar o caminho completo para qualquer executável que não deva depender do new ("custom") PATH
. Por exemplo /usr/bin/id
.