GNU/Linux >> Linux の 問題 >  >> Linux

このSu-c「…」コマンドはどのように1つではなく2つのコマンドを渡すように見えますか?

以下のスクリプトを理解しようとしていますが、su行について混乱しています。 postgresコマンドライン引数を理解しています。

man suをするとき マニュアルには

と書かれています

-c、–command =COMMAND
-cを使用して単一のコマンドをシェルに渡します

ただし、su - postgres -c ...の行 2つのコマンドが含まれているようです

  • 最初にLD_LIBRARY環境変数を設定します
  • pg_ctlを呼び出す2番目の方法

それで、-cで渡される2つのコマンドまたは1つのコマンドがありますか?

start()
{
        echo $"Starting PostgreSQL 9.1: "
        su - postgres -c "LD_LIBRARY_PATH=/opt/PostgreSQL/9.1/lib:$LD_LIBRARY_PATH /opt/PostgreSQL/9.1/bin/pg_ctl -w start -D \"/opt/PostgreSQL/9.1/data\" -l \"/opt/PostgreSQL/9.1/data/pg_log/startup.log\""

        if [ $? -eq 0 ];
        then
                echo "PostgreSQL 9.1 started successfully"
                exit 0
        else
                echo "PostgreSQL 9.1 did not start in a timely fashion, please see /opt/PostgreSQL/9.1/data/pg_log/startup.log for details"
                exit 1
        fi
}

承認された回答:

これは、シェルに渡される単一のコマンドです。シェルを使用すると、コマンドごとに環境変数を設定できます。例:

PGPORT=5433 psql

su 引数を使用してシェルを呼び出すため、次のようになります。

su -c 'PGPORT=5433 psql'

やっているようなものです:

su
exec bash -c 'PGPORT=5433 psql'

率直に言って、私はsudoを使用する傾向があります。これにより、環境変数の設定が簡単になり、シェルを経由しないため、複雑な引用符を使用したコマンドを適切に処理できます。


Linux
  1. ティーコマンドはどのように機能しますか?

  2. 1つのコマンドで2つのファイルタイプをRsyncしますか?

  3. 2 つの ar 静的ライブラリを 1 つにマージする方法は?

  1. あるコマンドの出力を引数として別のコマンドに渡す方法は?

  2. OSに基づいてBashコマンドを実行するために1つのVimコマンドをマップする方法は?

  3. bashrcエイリアスでコマンドをエスケープするには?

  1. Linux でユーザー コマンドを制限する方法

  2. ansible コマンドでワイルドカードに言及する方法

  3. ps コマンドはどのように機能しますか?