GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Perintah Su -c "..." Ini Tampaknya Melewati Dua Perintah, Bukan Satu?

Saya mencoba memahami skrip di bawah ini dan saya bingung dengan baris su. Saya memahami argumen baris perintah postgres.

ketika saya melakukan man su manualnya mengatakan

-c, –command=COMMAND
meneruskan satu COMMAND ke shell dengan -c

Namun baris dengan su - postgres -c ... sepertinya berisi dua perintah

  • yang pertama menyetel variabel lingkungan LD_LIBRARY
  • yang kedua memanggil pg_ctl

Jadi apakah ada dua perintah yang diteruskan dengan -c atau satu ?

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
}

Jawaban yang Diterima:

Ini adalah satu perintah yang diteruskan ke shell. Shell memungkinkan Anda untuk mengatur variabel lingkungan berdasarkan per-perintah, misalnya:

PGPORT=5433 psql

su memanggil shell dengan argumennya, jadi:

su -c 'PGPORT=5433 psql'

seperti melakukan:

su
exec bash -c 'PGPORT=5433 psql'

Terus terang, saya cenderung lebih suka menggunakan sudo, yang membuat pengaturan variabel lingkungan menjadi mudah dan menangani perintah dengan kutipan kompleks dengan benar karena tidak melalui shell.


Linux
  1. Bagaimana Memetakan Satu Perintah Vim Untuk Menjalankan Perintah Bash Berdasarkan Os?

  2. Bagaimana Cara Kerja Perintah Tee??

  3. Rsync Dua Jenis File Dalam Satu Perintah?

  1. Bagaimana Melewati Output Dari Satu Perintah Sebagai Argumen ke Yang Lain?

  2. Bagaimana menyebutkan wildcard dalam perintah yang memungkinkan

  3. Bagaimana cara kerja perintah ps?

  1. Bagaimana cara menggabungkan dua perpustakaan statis menjadi satu?

  2. Cara membatasi perintah pengguna di Linux

  3. Bagaimana cara menghindari perintah dalam alias bashrc?