Bagaimana cara mengganti / mengejar id pengguna dengan skrip bash untuk menjalankan perintah dalam skrip yang sama?

12

Apakah ada cara untuk mengalihkan identitas pengguna di dalam skrip (dieksekusi sebagai root sebagai bagian dari proses instalasi) untuk menjalankan beberapa perintah tanpa memanggil skrip eksternal, lalu kembali rootuntuk menjalankan perintah lain?

Semacam:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...
a1an
sumber

Jawaban:

27

Tidak. Tapi Anda bisa menggunakan sudountuk menjalankan shell dan menggunakan heredoc untuk memberi perintah.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
Ignacio Vazquez-Abrams
sumber
Ini tentu saja melakukan pekerjaan dalam menyatukan semuanya dalam skrip yang sama dan juga dapat menggunakan penggantian perintah jika semuanya dibungkus dengan braket penutup satu baris setelah EOF
a1an
Jawaban ini lebih baik daripada semua jawaban dalam pertanyaan yang diduplikasi .
Dan Dascalescu
1
Saya hampir bertanya-tanya, jika saya melakukan ini, saya tidak akan menggunakan EOF, dan sebagai gantinya mengubah nama heredoc menjadi SUDO. Dengan begitu saya akan ingat bahwa saya berjalan sebagai pengguna super di dalam kode yang berisi.
Joe Heyming
Untuk beberapa alasan, tampaknya mengatur vars di perintah heredoc, vars tidak diatur. Jika saya mencoba BLA="something"dan kemudian misalnya echo "In: $BLA":, sepertinya BLA kosong
Efren