Ich sehe viele Beispiele für die Überprüfung, ob ein Benutzer in einem *nix-System anhand der ID existiert
Um meinen Code zu testen, habe ich einen einfachen Code erstellt und nach Überprüfung und Verifizierung der Arbeit habe ich ihn kopiert, um ein Skript zu entwickeln
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
Testcode
sudo local/checkuser.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim.EXISTS
user exists
Aber das Kopieren in meinem Skript funktioniert nicht
#!/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
Testcode
sudo local/deploy_site.sh misitio test 7.3 abkrim /home/abkrim/Sites/
abkrim
user does not exist
Antwort1
PATH
ist in der Umwelt, es istbesonders. Nachdem Ihr Skript dies getan hat PATH=$5
, kann es die id
ausführbare Datei nicht mehr finden. Daher
id "$USER" >/dev/null 2>&1
schlägt stillschweigend fehl.
Sie möchten wahrscheinlich nicht überschreiben PATH
. Sie möchten wahrscheinlichIhre Variablen in Kleinbuchstaben.
Wenn Sie jedochWirklichüberschreiben möchten PATH
, sollten Sie später den vollständigen Pfad zu jeder ausführbaren Datei verwenden, die nicht von der neuen („benutzerdefiniert“) abhängen soll PATH
. Beispiel /usr/bin/id
: