#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: = não encontrado
Linha 157
Observação
Eu anexei esta linha source ~/.bashrc
ao meu .zshrc
to
vi .zshrc
source ~/.bashrc # import all my quick aliases and fns
Responder1
Em zsh
,=cmd
é um operador de expansão de nome de arquivo que se expande para o caminho do cmd
comando. =cmd
é similar a $commands[cmd]
.
Então aqui, com ==
um dos argumentos do [
comando, isso o expande para o caminho do =
comando. Como não há nenhum comando chamado =
no seu arquivo $PATH
, isso causa um erro.
Comparar:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
O operador de igualdade no [
comando é =
. O [
comando apenas faz testes, não faz nenhuma atribuição, portanto não há necessidade de diferenciar entre um operador de atribuição e um operador de comparação de igualdade como existe em algumas outras linguagens (com =
vs ==
como em C ou :=
vs =
em algumas outras, etc) .
Então deveria ser apenas:
[ "$USER" = root ]
Ainda assim, o [
of zsh
, assim como o of ksh
também suporta ==
como alternativa ao =
, mas a menos que você desabilite a equals
opção (como na ksh
emulação), você precisará citar pelo menos o primeiro =
para evitar esse =cmd
operador:
[ "$USER" '==' root ]
Observe que while $USERNAME
é definido automaticamente por zsh
, $USER
não é (embora seja definido como uma variável de ambiente por algumas coisas como login
).
Para testar se você tem privilégios de superusuário, é mais robusto verificar se seu ID de usuário efetivo é 0, o que pode ser feito em zsh
ou bash
com [ "$EUID" -eq 0 ]
ou (( EUID == 0 ))
.
Veja também:
Responder2
Esta linha não é realmente sintaticamente correta (mas bash
lida com isso):
if [ $USER == 'root' ]
Você deve usar ==
apenas com [[
... ]]
e =
caso contrário. Eu também recomendo que você coloque aspas duplas $USER
se estiver com [
... ]
sintaxe
if [[ "$USER" == 'root' ]]
ou
if [ "$USER" = 'root' ]