筆記

筆記
#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 ]

仍然是[of zsh,就像 of 一樣ksh也支援==作為 的替代選項=,但除非您停用該equals選項(就像在ksh模擬中一樣),否則您需要至少引用第一個=以避免該=cmd運算符:

[ "$USER" '==' root ]

請注意, while$USERNAME是由 自動設定的zsh$USER但不是(儘管它被諸如 之類的東西設定為環境變數login)。

要測試您是否具有超級使用者權限,檢查您的有效使用者 ID 是否為 0 更為可靠,這可以在zshbash中使用[ "$EUID" -eq 0 ]或完成(( EUID == 0 ))

也可以看看:

答案2

這行程式碼在語法上並不正確(但bash可以處理它):

if [ $USER == 'root' ]

您應該==僅與[[...一起使用]]=否則。$USER如果您繼續使用[...]語法,我還建議您使用雙引號

if [[ "$USER" == 'root' ]]

或者

if [ "$USER" = 'root' ]

相關內容