我是外壳新手。
我正在写一个非常基本的脚本:
#!/bin/bash
example()
{
echo "Code that don't need sudo."
sudo -s
echo "Code that need sudo"
}
example
运行这个脚本后我期望:
迅速的
Code that don't need sudo.
shell询问我密码
如果密码正确则提示
Code that need sudo.
但是输入正确的密码后却没有出现提示,Code that need sudo.
为什么以及如何解决呢?
答案1
这是因为sudo -s
启动了 root shell,输入密码后您就会发现自己在这个 shell 中。如果您随后退出 shell,您将看到Code that need sudo
:
$ foo.sh
Code that don't need sudo.
[sudo] password for terdon:
[root@tpad terdon]# exit
Code that need sudo
一般来说,在所有脚本中,当您告诉它运行命令时,脚本只会在命令完成后继续执行。因此,当您的脚本启动时sudo -s
,它会等待脚本完成后再继续。这就是为什么在我运行exit
(或按ctrl+ )后打印文本的原因D。
答案2
-s
如果没有命令,则会运行交互式 shell,因此您将不再与脚本位于同一 shell 中。
man sudo
详情请参阅。
但这应该有效:
#!/bin/bash
example()
{
echo "Code that don't need sudo."
sudo -s echo "Code that need sudo"
}
example