有没有办法根据用户指定使用哪个shell?

Is there a way to designate which shell to use depending on the user?

在这种情况下,我有一个由两个用户共享的脚本。一个用户使用 bash 另一个用户使用 zsh。我需要此脚本根据登录用户使用 bash 或 zsh。例如:

#!/bin/bash if user1
#!/bin/zsh  if user2

实际如何实施?

更好的是,是否只有当特定用户正在执行脚本时才使用某个 shell 默认值?大致如下:

if user1
then
  #!/bin/bash
else
  #!/bin/zsh
fi

您可以创建一个包装脚本来检查 $UID,然后调用所需脚本的正确版本。

没有充分的理由这样做。然而:

#!/bin/sh
if [ -z "$shell_selected" ]; then
  case "$(id -u)" in
    user1) export shell_selected=1; exec zsh "[=10=]" "$@" ;;
    user2) export shell_selected=1; exec bash "[=10=]" "$@" ;;
  fi
fi

# ...script contents here...

重要的是:

  • 为了防止我们自己陷入无限循环,我们导出一个环境变量,然后用不同的shell重新执行我们自己,并且只有在以下情况下才重新执行该环境变量未设置。
  • 要实际更改 shells,我们使用 exec 调用,它用不同的程序替换我们的 process-table 条目。

不过,再说一遍:绝对没有理由这样做,而且有很多理由不这样做。您的用户每个 运行 脚本都可以使用不同于其本机配置 shell 的 shebang,就像用户可以 运行 Python 脚本一样,即使他们的本机 shell将 永远不会 成为 Python -- shebang 行控制解释器。