Kemungkinan untuk mengabaikan shell pengguna di perintah "su"?

9

Jika aku melakukan

su - -c 'mkdir bin' user1

maka saya mengerti

su: /usr/bin/ksh: No such file or directory

karena shell pengguna diatur ke kshdalam /etc/passwddan kshtidak diinstal.

Pertanyaan

Bagaimana cara menjalankan perintah sebagai pengguna dalam kasus seperti itu?

Sandra
sumber
Mengapa shell pengguna disetel ke sesuatu yang tidak ada?
MDMarra
1
/etc/passwdberasal dari NIS.
Sandra
1
Nah itu menjelaskan itu.
MDMarra

Jawaban:

18

Jika Anda tidak menaruh -setelahnya sumaka itu tidak akan memuat lingkungan pengguna itu, tetapi perintah masih akan dijalankan sebagai pengguna itu.


Tampaknya saya salah mengerti masalah Anda yang sebenarnya. Seperti yang lain katakan -sadalah opsi yang mungkin Anda inginkan.

MDMarra
sumber
Itu masih akan mencoba menggunakan shell yang ada di / etc / passwd, yang tampaknya menjadi masalah yang lebih besar.
freiheit
Shell menempatkan identitasnya sendiri ke dalam variabel lingkungan $ SHELL, tetapi / etc / passwd adalah tempat su mencari shell mana yang akan dijalankan. `-` diteruskan ke pemanggilan shell yang memerintahkannya untuk bertindak sebagai shell "login" (bash menjalankan file profil alih-alih file bashrc, mengubah direktori kerja, dll.)
freiheit
8

Kamu bisa menggunakan:

su -s /bin/sh -c 'mkdir bin' user1

The -spilihan untuk su menentukan shell untuk digunakan, mengesampingkan apa yang ada di / etc / passwd.

Saya menjatuhkan perintah -dari Anda karena, selain memuat profil, itu mungkin akan mengubah direktori kerja ke direktori home pengguna untuk perintah, jadi Anda akan membuat 'bin' di direktori home user1, bukan Anda saat ini direktori.

freiheit
sumber
5

Saya percaya opsi -s / - shell untuk su memungkinkan Anda memilih shell untuk digunakan sambil menjaga bagian lain dari lingkungan pengguna, / bin / sh ditentukan oleh posix sehingga harus tersedia di mana-mana.

Roman A. Taycher
sumber