一、问题
有些情况下,部分脚本命令需要获取管理员权限了执行:
1 | sudo systemctl restart nginx |
1.在一般情况下,需要等待你输入管理员密码以继续执行。如果你需要在 Jenkins 等需要自动化执行的脚本中时不可行的,此时就需要不输入密码来执行脚本。
二、解决方案
1、全局配置
参见免密码使用sudo和su。
2、将密码以参数形式追加到脚本
使用管道
1 | echo [password] | sudo -S systemctl restart nginx |
使用文本块输入重定向
1 | sudo -S systemctl restart nginx << EOF |
三、知识补充
1、-S 参数
-S 参数是 sudo 命令的可选参数,用以接收标准的密码输入
1 | -S, --stdin read password from standard input |
2、 << EOF 命令
在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。
在上面的场景中,就是将‘password’当做命令的输入。