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

时间:2015-04-21 00:41:05

标签: bash shell unix zsh

在这种情况下,我有一个由两个用户共享的脚本。一个用户使用bash,另一个用户使用zsh。我需要这个脚本来使用bash或zsh,具体取决于登录用户。例如:

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

如何实际实现这一目标?

更好的是,是否有默认值然后只有在特定用户执行脚本时才使用某个shell?有点像:

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

2 个答案:

答案 0 :(得分:4)

没有充分的理由这样做。但是:

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

# ...script contents here...

重要的:

  • 为了防止我们进入无限循环,我们导出一个环境变量,然后用另一个shell重新执行,并且只有在没有设置该环境变量时才重新执行。 / LI>
  • 要实际更改shell,我们使用exec调用,它将我们的进程表条目替换为不同的程序。

同样,但是:绝对没有理由这样做,并且有充足的理由不这样做。您的用户可以使用与本机配置的shell不同的shebang运行脚本,就像用户可以运行Python脚本一样,即使他们的本机shell 从不是Python - shebang行控制解释器。

答案 1 :(得分:1)

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