linux sudo令一次执行多个命令,特别是source环境变量

sudo可以让当前用户拥有su用户的权限,来执行root下才能执行的命令,访问操作等。本文记录下用sudo一次性执行多个命令的方法。

直接sudo执行

类似source会直接报找不到命令

[zxt2000@anolios86-1 ~]$ sudo source /home/gbase/.gbase_profile
sudo: source:找不到命令
[zxt2000@anolios86-1 ~]$

查看文件确实存在,但sudo就是无法运行source

[zxt2000@anolios86-1 ~]$ sudo ls -l /home/gbase/.gbase_profile
-rw-rw-r-- 1 gbase gbase 336 1月  24 09:47 /home/gbase/.gbase_profile
[zxt2000@anolios86-1 ~]$ sudo "source /home/gbase/.gbase_profile;gccli"
sudo: source /home/gbase/.gbase_profile;gccli:找不到命令

用sudo sh -c来执行多个命令

如果命令里有双引号和$符号,则转义下。

[zxt2000@anolios86-1 ~]$ sudo sh -c "source /home/gbase/.gbase_profile;gccli -e\"show processlist\""
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
| Id | User            | Host      | db   | Command | Time  | State                       | Info             |
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
|  1 | event_scheduler | localhost | NULL | Daemon  | 12775 | Waiting for next activation | NULL             |
| 41 | root            | localhost | NULL | Query   |     0 | NULL                        | show processlist |
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
[zxt2000@anolios86-1 ~]$ 

python代码里处理sudo命令中的特殊字符

cmd = "sudo sh -c \""+cmd.replace('"','\\"').replace('$','\\$')+"\""