如何在sudo中运行两个命令?
有没有办法如何从命令行运行两个db2命令? (它会从php exec命令中调用)
- db2连接到ttt (注意我们需要连接第二条命令的连接
- 
db2 UPDATE CONTACT SET EMAIL_ADDRESS ='mytestaccount@gmail.com' sudo -su db2inst1 db2连接到ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS ='mytestaccount@gmail.com' 
第一个命令完成正确,但第二个SQL1024N A database connection does not exist. SQLSTATE=08003 SQL1024N A database connection does not exist. SQLSTATE=08003 
注意
 我需要运行这个php用户。 命令sudo -u db2inst1 id为php用户给我正确的输出。 
sudo可以通过一个shell运行多个命令,例如:
$ sudo -s - 'whoami; 我是谁' 根 根
你的命令是这样的:
sudo -u db2inst1 -s - “db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS ='mytestaccount@gmail.com'”
如果你的sudo版本不能用带-s的分号工作(显然,如果使用某些选项编译,它不会),你可以使用
sudo - sh -c'whoami; 我是谁'
相反,它基本上做同样的事情,但让你明确命名shell。
对于你的命令,你也可以参考下面的例子:
 sudo sh -c "whoami; whoami" 
我通常做:
 sudo bash -c 'whoami; whoami' 
如果你想处理报价:
 sudo -s -- <<EOF id pwd echo "Done." EOF 
  -s选项对我不起作用, – 我做到了。 
下面是我如何从我的bash更新日志大小的一个例子:
 sudo -u [user] -i -- sh -c 'db2 connect to [database name];db2 update db cfg for [database name] using logsecond 20;db2 update db cfg for [database name] using logprimary 20;' 
 另一种使用eval避免了使用子shell: 
 sudo -s eval 'whoami; whoami' 
  注意:使用sudo -s的其他答案失败,因为引号被传递到bash并作为单个命令运行,因此需要使用eval去除引号。  eval更好的解释是这个答案 
在命令内引用也很容易:
 $ sudo -s eval 'whoami; whoami; echo "end;"' root root end; 
如果命令需要停止运行,如果一个失败使用双和号而不是分号:
 $ sudo -s eval 'whoami && whoamit && echo "end;"' root /bin/bash: whoamit: command not found 
以上的答案不会让你在引号内引用。 该解决scheme将:
 sudo -su nobody umask 0000 \; mkdir -p "$targetdir" 
umask命令和mkdir-command都与“nobody”用户一起运行。
在terminal上input:
 $ sudo bash 
 然后写你想要的命令。 完成后键入exit 。 
 如果您需要自动化,请创build一个script.sh文件并运行它: 
 $ sudo ./script.sh