#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 또는 다른 언어의 vs 등) [
에서와 같이 할당 연산자와 동등 비교 연산자를 구분할 필요가 없습니다 .=
==
:=
=
따라서 다음과 같아야 합니다.
[ "$USER" = root ]
Still [
of zsh
, like of 도 as 에 대한 대안을 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' ]