有什么办法可以从命令行运行两个Db2命令吗?(它们将从PHP exec命令调用.)
db2 connect to ttt (请注意,我们需要为第二个命令实时连接db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'我试过这个:
sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'
Run Code Online (Sandbox Code Playgroud)
第一个命令正确完成但第二个命令失败并显示错误消息 SQL1024N A database connection does not exist. SQLSTATE=08003
请注意,我需要以php用户身份运行它.sudo -u db2inst1 id作为php用户的命令给了我正确的输出.
Jas*_*son 168
对于您的命令,您还可以参考以下示例:
sudo sh -c "whoami; whoami"
wjl*_*wjl 149
sudo可以通过shell运行多个命令,例如:
$ sudo -s -- 'whoami; whoami' root root
你的命令是这样的:
sudo -u db2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'"
如果您的sudo版本不能与分号一起使用-s(显然,如果使用某些选项进行编译则不会),您可以使用
sudo -- sh -c 'whoami; whoami'
相反,它基本上做同样的事情,但让你明确地命名shell.
小智 40
如果您想处理报价:
sudo -s -- <<EOF
id
pwd
echo "Done."
EOF
Run Code Online (Sandbox Code Playgroud)
使用eval避免使用子shell 的替代方法:
sudo -s eval 'whoami; whoami'
Run Code Online (Sandbox Code Playgroud)
注意:其他答案使用sudo -s失败,因为引号被传递给bash并作为单个命令运行,因此需要使用eval去除引号.eval更好的解释是这个SO答案
在命令中引用也更容易:
$ sudo -s eval 'whoami; whoami; echo "end;"'
root
root
end;
Run Code Online (Sandbox Code Playgroud)
如果一个命令失败,如果命令需要停止运行,请使用双括号而不是分号:
$ sudo -s eval 'whoami && whoamit && echo "end;"'
root
/bin/bash: whoamit: command not found
Run Code Online (Sandbox Code Playgroud)