1. ホーム
  2. bash

[解決済み] sudoで2つのコマンドを実行するには?

2022-05-10 11:14:34

質問

コマンドラインから2つのDb2コマンドを実行する方法はありますか?(これらは、PHP の exec コマンドを使用します)。

  1. db2 connect to ttt (2番目のコマンドを実行するには、接続が有効である必要があることに注意してください。
  2. db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'

こんなことをやってみました。

sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'

最初のコマンドは正しく終了しますが、2番目のコマンドはエラーメッセージで失敗します。 SQL1024N A database connection does not exist. SQLSTATE=08003

phpのユーザーで実行する必要があることに注意してください。コマンドは sudo -u db2inst1 id として php ユーザは正しい出力をしてくれます。

解決方法は?

sudoは、例えばシェル経由で複数のコマンドを実行することができます。

$ sudo -s -- 'whoami; whoami' です。
ルート
ルート

コマンドは次のようなものになります。

sudo -u db2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'".Db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'"

sudoのバージョンで、-sでセミコロンが使えない場合(特定のオプションでコンパイルすると使えないらしい)には

sudo -- sh -c 'whoami; whoami'

これは基本的に同じことをしますが、シェルの名前を明示的に指定します。