Veo muchos ejemplos sobre cómo verificar si el usuario existe en el sistema *nix usando id
Para probar mi código, creé un código simple y después de verificar y verificar el trabajo lo copié para desarrollar el script.
checkuser.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 prueba
sudo local/checkuser.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim.EXISTS
user exists
Pero cuando la copia en mi script no 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 prueba
sudo local/deploy_site.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim
user does not exist
Respuesta1
PATH
está en el medio ambiente, esespecial. Después de que su script lo haga PATH=$5
, ya no podrá encontrar el id
ejecutable; por lo tanto esto
id "$USER" >/dev/null 2>&1
falla silenciosamente.
Probablemente no desee sobrescribir PATH
. probablemente quierastus variables en minúsculas.
Sin embargo si tuen realidaddesea sobrescribir PATH
, luego debería usar la ruta completa a cualquier ejecutable que no debería depender del nuevo ("personalizado") PATH
. P.ej /usr/bin/id
.