![如果我之前使用 sudo 运行脚本,会使用什么 shell](https://linux22.com/image/922643/%E5%A6%82%E6%9E%9C%E6%88%91%E4%B9%8B%E5%89%8D%E4%BD%BF%E7%94%A8%20sudo%20%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%8C%E4%BC%9A%E4%BD%BF%E7%94%A8%E4%BB%80%E4%B9%88%20shell.png)
我有一个名为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 执行。