ノート

ノート
#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]

したがって、ここではコマンド==のパラメータの1つを使用して[コマンドのパスに拡張します==コマンドから呼び出されたコマンドがないため、エラーが$PATH発生します。

比較する:

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

命令の恒等演算子[はです=。このコマンドはテストのみを実行し、割り当ては実行しないため、他の言語(Cのvsや他の言語のvsなど)など、割り当て演算子と同等の比較[演算子を区別する必要はありません。===:==

したがって、次のようにする必要があります。

[ "$USER" = root ]

Still [of zsh、 like of も as の代替をサポートしていますkshが、そのオプションを無効にしない限り(シミュレーションのように)、その演算子を避けるために少なくとも最初のオプションを引用する必要があります。===equalsksh==cmd

[ "$USER" '==' root ]

whileは$USERNAMEによって自動的に設定されますが、zshそうでは$USERありません(たとえ環境変数として設定されますがlogin)。

スーパーユーザー権限があるかどうかをテストするには、有効なユーザーIDが0であることを確認する方がより信頼性があります。これはまたはzshbash使用して[ "$EUID" -eq 0 ]実行できます(( EUID == 0 ))

また見なさい:

おすすめ記事