Bash

/root/.bashrc:157: = 未找到

  • May 24, 2021
#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

In zsh,=cmd是一個文件名擴展運算符,用於擴展cmd命令的路徑。=cmd類似於$commands[cmd]

因此,在這裡,使用命令==的參數之一[,將其擴展為命令的路徑==由於您的 中沒有呼叫命令$PATH,因此會導致錯誤。

相比:

$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found

[命令中的相等運算符是=. 該[命令僅進行測試,不進行任何賦值,因此無需像其他一些語言中那樣區分賦值運算符和相等比較運算符(在 C 中使用 vs 或在其他一些語言中使用=vs等) .==``:=``=

所以它應該是:

[ "$USER" = root ]

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

[ "$USER" '==' root ]

請注意,while$USERNAME是由 自動設置的zsh$USER而不是(儘管它被某些東西設置為環境變數,例如login)。

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

也可以看看:

引用自:https://unix.stackexchange.com/questions/651173