希望在sh脚本文件中的shell指令中使用sudo命令,需要自动输入密码以确保顺序执行。有两种方式可以实现:
1、将密码以参数形式追加到脚本
使用管道:echo 密码 | sudo -S shell命令
如,需要使用超级权限执行python脚本:sudo python run.py,密码:123。则shell指令可写为:
echo 123 | sudo -S python run.py
-S表示将echo输出的标准流读取,作为输入密码。终端执行:man sudo,可查看-S作用。
PS:密码为字符串时,用引号。如密码为:admin时,shell指令改为:
echo "admin" | sudo -S python run.py
2、使用文本块输入重定向
sudo -S sh xxx.sh << EOF
[password]
EOF
eg:
sudo -S sh xxx.sh << EOF
123456
EOF
说明:
-S 参数是 sudo 命令的可选参数,用以接收标准的密码输入<< EOF 命令。
在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。
3、应用举例
设置开机启动脚本(autoload.sh):
#! /bin/bash
# 1. 修改串口设备权限
sudo -S chmod 777 /dev/ttyTHS0 /dev/ttyTHS1 << EOF
1
EOF
# 新建终端,以sudo权限执行桌面auto_run.py文件
cd /home/ubuntu/Desktop
gnome-terminal -x bash -c "echo 1|sudo -S python auto_run.py"