Я вижу много примеров проверки существования пользователя в системе *nix с использованием идентификатора.
Для тестирования своего кода я создал простой код и после проверки и подтверждения работы скопировал его в скрипт разработки.
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
Тестовый код
sudo local/checkuser.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim.EXISTS
user exists
Но когда копирование в моем скрипте не работает
#!/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
Тестовый код
sudo local/deploy_site.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim
user does not exist
решение1
PATH
находится в окружающей среде, этоособенный. После того, как ваш скрипт сделает это PATH=$5
, он больше не сможет найти id
исполняемый файл; поэтому это
id "$USER" >/dev/null 2>&1
молча терпит неудачу.
Вы, вероятно, не хотите перезаписывать PATH
. Вы, вероятно, хотитеваши переменные в нижнем регистре.
Однако если выДействительнохотите перезаписать PATH
, то позже вам следует использовать полный путь к любому исполняемому файлу, который не должен зависеть от нового ("пользовательского") PATH
. Например /usr/bin/id
.