#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: = no encontrado
Línea 157
Nota
Agregué esta línea source ~/.bashrc
a .zshrc
mi
vi .zshrc
source ~/.bashrc # import all my quick aliases and fns
Respuesta1
En zsh
,=cmd
es un operador de expansión de nombre de archivo que se expande a la ruta del cmd
comando. =cmd
es parecido a $commands[cmd]
.
Entonces aquí, con ==
uno de los argumentos del [
comando, eso lo expande a la ruta del =
comando. Como no se llama a ningún comando =
en su archivo $PATH
, eso provoca un error.
Comparar:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
El operador de igualdad en el [
comando es =
. El [
comando solo realiza pruebas, no realiza ninguna asignación, por lo que no es necesario diferenciar entre un operador de asignación y un operador de comparación de igualdad como ocurre en otros lenguajes (con =
vs ==
como en C o :=
vs =
en algunos otros, etc.) .
Entonces debería ser simplemente:
[ "$USER" = root ]
Aún así , [
of zsh
, al igual que of ksh
también se admite ==
como alternativa a =
, pero a menos que deshabilites la equals
opción (como en ksh
la emulación), necesitarás citar al menos el primero =
para evitar ese =cmd
operador:
[ "$USER" '==' root ]
Tenga en cuenta que while $USERNAME
lo establece automáticamente zsh
, $USER
no lo es (aunque algunas cosas como ) lo configuran como una variable de entorno login
.
Para comprobar si tiene privilegios de superusuario, es más eficaz comprobar que su ID de usuario efectivo sea 0, lo que se puede hacer en zsh
o bash
con [ "$EUID" -eq 0 ]
o (( EUID == 0 ))
.
Ver también:
Respuesta2
Esta línea no es realmente correcta sintácticamente (pero bash
la maneja):
if [ $USER == 'root' ]
Debes usarlo ==
solo con [[
... ]]
y =
en caso contrario. También te recomendaría poner comillas dobles $USER
si te quedas con la sintaxis [
...]
if [[ "$USER" == 'root' ]]
o
if [ "$USER" = 'root' ]