停止sudo停止脚本完成

时间:2017-11-04 09:34:17

标签: bash sudo

如何停止sudo程序停止脚本完成?
Sudo提示输入密码,它在第一次尝试时总是失败,第二次尝试成功,但是停止脚本完成。
脚本将停止,并且在提示输入密码后的任何命令都不会被执行。
脚本第7行的hi不会被执行。
如何阻止sudo停止脚本的其余部分完成?

sudo bash << 'END'
    cat << 'DONE' > /usr/bin/hi
        echo hi
DONE
    sudo chmod +x /usr/bin/hi
END
hi

3 个答案:

答案 0 :(得分:0)

如果您的脚本需要root权限,则必须在某些时候提供它们。 以root身份运行脚本。

答案 1 :(得分:0)

我猜你要做的更多是:

handle_IRQ_event

请注意,我将chmod移出sudo bash << 'END' cat << 'DONE' > /usr/bin/hi echo hi DONE chmod +x /usr/bin/hi END hi 文件,因为您似乎希望此文件可执行,而不是更改自己的权限。

顺便说一句,我也删除了第二个sudo,因为你已经处于sudo环境中,所以没用。

编辑:以下问题编辑:

实际上,当你用sudo执行一个命令时,你(通常)需要提供你的密码,然后根据一段时间保持root凭证&#34;这就是你被问到密码的原因第一次,但不是第二次。

为了防止被要求输入密码,您需要编辑sudoers文件(使用/usr/bin/hi命令)并将要运行的程序添加到允许的命令中,不要求密码(请阅读文件中的文档) ,或visudo)。然而,给出这种无限制的限制是非常危险的,特别是在这种情况下,因为程序将是man sudoers,因此您将能够以root身份运行控制台。能够以root身份sudo已经是一个很大的责任,没有密码就像使用shell作为root一样,因此风险很大(特别是对于系统,如果在执行命令或更新脚本时出错)。

答案 2 :(得分:0)

sudo并未在sudo之后停止执行命令 所有这些命令都在 sudo下执行 换句话说,sudo首先运行。然后它调用bash,其他命令就像here-doc一样提供给它。

您可以使用-S的{​​{1}}选项,如下所示:

sudo

在此处用您的用户密码替换sudo -S bash << 'END' root123 cat << 'DONE' > /usr/bin/hi echo hi DONE chmod +x /usr/bin/hi END hi 。您必须在脚本中以纯文本形式输入它。

有效地,here-doc由root123 + sudo消费。

可以尝试的其他选项是使用bash。请查看SUDO_ASKPASS了解详情。