如何停止sudo程序停止脚本完成?
Sudo提示输入密码,它在第一次尝试时总是失败,第二次尝试成功,但是停止脚本完成。
脚本将停止,并且在提示输入密码后的任何命令都不会被执行。
脚本第7行的hi不会被执行。
如何阻止sudo停止脚本的其余部分完成?
sudo bash << 'END'
cat << 'DONE' > /usr/bin/hi
echo hi
DONE
sudo chmod +x /usr/bin/hi
END
hi
答案 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执行一个命令时,你(通常)需要提供你的密码,然后根据一段时间保持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
了解详情。