注記

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

それでも、[の はzsh、 の と同様に、 の代替としてkshサポートされていますが、オプションを無効にしない限り (エミュレーションの場合のように)、その演算子を回避するには、少なくとも最初の を引用符で囲む必要があります。===equalsksh==cmd

[ "$USER" '==' root ]

$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' ]

関連情報