如果我之前使用 sudo 运行脚本,会使用什么 shell

如果我之前使用 sudo 运行脚本,会使用什么 shell

我有一个名为example.sh的脚本。

echo Write a number, please:
read x
let res=$x+1
echo $res

如果我以这种方式运行它,我会收到一个错误:

mario@gazpatxo-linux:~/temp$ sudo ./example.sh 
[sudo] contraseña para mario: 
Write a number, please:
3
./example.sh: 3: ./example.sh: let: not found

如果我以其他方式运行它,则不会收到错误:

mario@gazpatxo-linux:~/temp$ sudo su
root@gazpatxo-linux:/home/mario/temp# ./example.sh 
Write a number, please:
4
5

在第二次默认运行中,我使用 /bin/bash,这是 root 的默认 shell,因此它可以正常工作,但在第一次运行中会发生什么?我使用的是哪个 shell?我可以在哪里更改它?

多谢!

答案1

我也测试了这一点,如果 example.sh 没有被标记为可执行文件,它就会给我同样的错误。

此命令应该使该文件可执行。

sudo chmod +x example.sh

#!/bin/bash您还应该添加steeldriver 在评论中提到的shebang 。

答案2

我终于找到了我的问题的答案。

使用命令“dpkg-reconfigure dash”将打开一个窗口,指示默认 dash 与“/bin/sh”相关联,并允许我们将其更改为“/bin/bash”,所以现在我可以运行第二种情况而不会出现错误,因为由于 dash 配置,它将使用识别 let 命令的 /bin/bash 执行。

相关内容