在 sudo 中 运行 时更改 shell 脚本中的 shell

Change shell in shell script when running in sudo

我的简单 shell 脚本如下所示

test.sh

#!/bin/zsh
echo $SHELL

当我运行命令sh test.sh时,结果是/bin/zsh

当我运行命令sudo sh test.sh时,结果是/bin/bash

我想 运行 这个脚本 sudo 并且需要 shell 为 zsh。有人可以帮忙吗?

#!/bin/zsh 告诉 OS 当你的脚本作为 可执行文件启动时, 它应该使用 zsh 到 运行 它。当您完成 chmod a+x test 然后 运行 您的脚本时, 会发生这种情况,方法是键入

test.sh

当你改为

sh test.sh

然后您将脚本直接传递给 sh,shebang 将被忽略。


echo $SHELL 打印当前 shell,但只打印当前用户的 login shell.对于您来说,这显然是 zsh,但对于超级用户来说,这显然是 bash。不过,这再次说明了 运行 正在编写您的脚本的 shell。


zsh 中使用 sudo 运行 你的脚本,只需要

sudo test.zsh

或者,无论您在文件中有什么 shebang,您始终可以通过执行

强制脚本在 zsh 中 运行
sudo zsh test.zsh