#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: = 찾을 수 없음
157호선
메모
나는 이 줄 을 source ~/.bashrc
내.zshrc
vi .zshrc
source ~/.bashrc # import all my quick aliases and fns
답변1
안에 zsh
,=cmd
명령 의 경로로 확장되는 파일 이름 확장 연산자입니다 cmd
. =cmd
비슷하다 $commands[cmd]
.
따라서 여기에서는 ==
명령 인수 중 하나를 사용하여 [
명령 경로로 확장합니다 =
. =
에 호출된 명령이 없으므로 $PATH
오류가 발생합니다.
비교하다:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
명령 의 항등 연산자 [
는 입니다 =
. 이 명령은 테스트만 수행하고 할당은 수행하지 않으므로 다른 언어(C의 vs like 또는 다른 언어의 vs 등) [
에서처럼 할당 연산자와 동등 비교 연산자를 구별할 필요가 없습니다. .=
==
:=
=
따라서 다음과 같아야 합니다.
[ "$USER" = root ]
여전히 [
of zsh
는 of 에 대한 대안으로 ksh
지원되지만 (에뮬레이션에서와 같이) 옵션 을 비활성화하지 않는 한 해당 연산자를 피하기 위해 최소한 첫 번째 항목을 인용해야 합니다 .==
=
equals
ksh
=
=cmd
[ "$USER" '==' root ]
while 은 $USERNAME
에 의해 자동으로 설정되지만 zsh
그렇지 $USER
않습니다(와 같은 항목에 의해 환경 변수로 설정됨 login
).
슈퍼유저 권한이 있는지 테스트하려면 유효 사용자 ID가 0인지 확인하는 것이 더 강력합니다. 이 작업은 또는 zsh
에서 bash
수행 할 수 있습니다 .[ "$EUID" -eq 0 ]
(( EUID == 0 ))
또한보십시오:
답변2
이 줄은 실제로 구문상 정확하지 않습니다(하지만 bash
처리합니다).
if [ $USER == 'root' ]
... ==
와 함께 사용해야 하며 그렇지 않은 경우에만 사용해야 합니다 . ... 구문을 사용하는 경우 큰따옴표를 사용하는 것이 좋습니다.[[
]]
=
$USER
[
]
if [[ "$USER" == 'root' ]]
또는
if [ "$USER" = 'root' ]