在这种情况下,我有一个由两个用户共享的脚本。一个用户使用bash,另一个用户使用zsh。我需要这个脚本来使用bash或zsh,具体取决于登录用户。例如:
#!/bin/bash if user1
#!/bin/zsh if user2
如何实际实现这一目标?
更好的是,是否有默认值然后只有在特定用户执行脚本时才使用某个shell?有点像:
if user1
then
#!/bin/bash
else
#!/bin/zsh
fi
答案 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...
重要的:
exec
调用,它将我们的进程表条目替换为不同的程序。同样,但是:绝对没有理由这样做,并且有充足的理由不这样做。您的用户可以使用与本机配置的shell不同的shebang运行脚本,就像用户可以运行Python脚本一样,即使他们的本机shell 从不是Python - shebang行控制解释器。
答案 1 :(得分:1)
您可以创建一个包装器脚本来检查$ UID,然后调用所需脚本的正确版本。