/etc/profile 缺少结束以平衡此 if 语句

/etc/profile missing end to balance this if statement

当我想在 Linux 上为 JAVA 配置环境变量时。我在文件中添加了一些句子,/etc/profile。 现在里面的内容如下

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$(id -u)" -eq 0 ]; then
  set PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  set PATH "/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH


if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "$(id -u)" -eq 0 ]; then
      set PS1 '# '
    else
      set PS1 '$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

export JAVA_HOME=/home/co-eda/Downloads/jdk-18.0.1.1
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=${JAVA_HOME}/bin:$PATH

然后我用 source /etc/profile 更新环境变量并得到这个错误

/etc/profile (line 30): Missing end to balance this if statement
    if [ -r $i ]; then
    ^
from sourcing file /etc/profile
    called on line 185 of file /usr/share/fish/config.fish
in function '.' with arguments '/etc/profile'

有谁知道为什么会发生这种情况以及如何修改此代码以便我可以 运行 顺利进行?如能得到答复,将不胜感激

发生这种情况是因为您正试图从 fish shell 获取 /etc/profilefish 的条件语句与 sh/bash/zsh 和其他 Bourne-compatible shell 不兼容。即 fish 而不是 一个 Bourne-compatible shell.

此文件 (/etc/profile) 仅供 Bourne-compatible shell 使用,如顶部的注释块所指定

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

如果您只想为 current 终端 window 更新环境变量,请尝试 运行 这个 -

exec sh
. /etc/profile
exec fish

如果要为所有个应用更新环境变量,需要注销再登录。