Проверить, существует ли пользователь, используя идентификатор (linux)

Проверить, существует ли пользователь, используя идентификатор (linux)

Я вижу много примеров проверки существования пользователя в системе *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.

Связанный контент