메모

메모
#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지원되지만 (에뮬레이션에서와 같이) 옵션 을 비활성화하지 않는 한 해당 연산자를 피하기 위해 최소한 첫 번째 항목을 인용해야 합니다 .===equalsksh==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' ]

관련 정보