在 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
我的简单 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