如何在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