Notiz

Notiz
#Get client IP base on current logged in user
if [ $USER == 'root' ]
then
    ip="$(last | awk 'NR==1 {print $3}')"
else
    ip="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
fi

/root/.bashrc:157: = nicht gefunden

Linie 157

Bildbeschreibung hier eingeben


Notiz

Ich habe diese Zeile source ~/.bashrcan meine .zshrcangehängt

vi .zshrc
source ~/.bashrc  # import all my quick aliases and fns

Antwort1

In zsh,=cmdist ein Dateinamenerweiterungsoperator, der zum Pfad des cmdBefehls erweitert wird. =cmdist ähnlich zu $commands[cmd].

Hier wird also mit ==in einem der Argumente des [Befehls zum Pfad des Befehls erweitert . Da in Ihrem =kein Befehl aufgerufen wird , verursacht dies einen Fehler.=$PATH

Vergleichen:

$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found

Der Gleichheitsoperator im [Befehl ist =. Der [Befehl führt nur Tests durch, er nimmt keine Zuweisungen vor. Daher muss nicht zwischen einem Zuweisungsoperator und einem Gleichheitsvergleichsoperator unterschieden werden, wie dies in einigen anderen Sprachen der Fall ist (mit =vs ==wie in C oder :=vs =in einigen anderen usw.).

Es sollte also einfach heißen:

[ "$USER" = root ]

Dennoch wird of [ebenso zshwie von als Alternative kshzu unterstützt , aber wenn Sie die Option nicht deaktivieren (wie es bei der Emulation der Fall ist), müssen Sie zumindest das erste in Anführungszeichen setzen, um diesen Operator zu vermeiden:===equalsksh==cmd

[ "$USER" '==' root ]

Beachten Sie, dass „while“ $USERNAMEautomatisch von gesetzt wird zsh, $USERaber nicht (obwohl es von einigen Dingen wie als Umgebungsvariable gesetzt wird login).

Um zu testen, ob Sie Superuser-Berechtigungen haben, ist es robuster, zu prüfen, ob Ihre effektive Benutzer-ID 0 ist. Dies kann in zshoder bashmit [ "$EUID" -eq 0 ]oder erfolgen (( EUID == 0 )).

Siehe auch:

Antwort2

Diese Zeile ist syntaktisch nicht ganz korrekt ( bashbewältigt das aber):

if [ $USER == 'root' ]

Sie sollten es ==nur mit [[... ]]und =andernfalls verwenden. Ich würde Ihnen auch empfehlen, doppelte Anführungszeichen zu verwenden, wenn Sie bei der ...- Syntax $USERbleiben[]

if [[ "$USER" == 'root' ]]

oder

if [ "$USER" = 'root' ]

verwandte Informationen