如何在sudo中运行两个命令?

有没有办法如何从命令行运行两个db2命令? (它会从php exec命令中调用)

  1. db2连接到ttt (注意我们需要连接第二条命令的连接
  2. 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 idphp用户给我正确的输出。

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