sudo -s [重复]之后发生了什么

sudo -s [重复]之后发生了什么

我是外壳新手。

我正在写一个非常基本的脚本:

#!/bin/bash
example()
{

    echo "Code that don't need sudo."
    sudo -s 
    echo "Code that need sudo"
 }

example

运行这个脚本后我期望:

  1. 迅速的Code that don't need sudo.

  2. shell询问我密码

  3. 如果密码正确则提示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

相关内容