#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
Notiz
Ich habe diese Zeile source ~/.bashrc
an meine .zshrc
angehängt
vi .zshrc
source ~/.bashrc # import all my quick aliases and fns
Antwort1
In zsh
,=cmd
ist ein Dateinamenerweiterungsoperator, der zum Pfad des cmd
Befehls erweitert wird. =cmd
ist ä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 zsh
wie von als Alternative ksh
zu 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:==
=
equals
ksh
=
=cmd
[ "$USER" '==' root ]
Beachten Sie, dass „while“ $USERNAME
automatisch von gesetzt wird zsh
, $USER
aber 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 zsh
oder bash
mit [ "$EUID" -eq 0 ]
oder erfolgen (( EUID == 0 ))
.
Siehe auch:
Antwort2
Diese Zeile ist syntaktisch nicht ganz korrekt ( bash
bewä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 $USER
bleiben[
]
if [[ "$USER" == 'root' ]]
oder
if [ "$USER" = 'root' ]