Dapatkan shell login sebagai root `su -l` tanpa mengubah direktori

1

Apakah ada cara untuk menjalankan sesuatu seperti su -litu membaca semua file shell login tetapi tidak mengubah direktori tempat Anda berada?

Untuk beberapa motivasi, saya mencoba membuat paket Slackware Linux. Sebagian besar paket waktu akan dibangun dengan benar jika Anda hanya menggunakan su. Namun, ada beberapa paket seperti sbclitu bergantung pada TeXalat dan akan gagal tanpa su -l. Saya lebih suka menggunakan suketika saya bisa lolos karena itu tidak mengubah direktori saat ini.

Jika saya di direktori suka ~/opt/haskell-stack-slackbuild.

$ pwd
/home/<user>/opt/haskell-stack-slackbuild

Jika saya hanya menjalankan susaya kembali di direktori yang sama, tetapi jika saya jalankan su -lmaka saya bisa mampir di /rootmana pun saya berada dan harus menavigasi kembali ke direktori tempat saya bekerja.

$ su -l
# pwd
/root
Gregory Nisbet
sumber

Jawaban:

2

Mengapa tidak sumber saja .profilesetelah Anda menjalankan di shell root?

$ su
Password: 
# . ~root/.profile
# 

Tentu saja Anda dapat sumber skrip apa pun dari mana saja sekali di shell root, dan dengan demikian memperbaiki atau mengubah lingkungan shell root dengan cara apa pun yang diperlukan.

Ada banyak cara seseorang dapat menyuntikkan pengaturan yang berbeda ke dalam shell root langsung dari shell asal menggunakan fakta yang sumenerima "parameter shell" pada baris perintahnya. Berikut adalah contoh yang memberikan superintah instruksi untuk menjalankan shell root sedemikian rupa untuk mencari profil root dan kemudian mulai shell dengan lingkungan dari profil itu (yang, karena exec, menggantikan shell yang dimulai dengan su):

$ su -- root -c ". /root/.profile; exec /bin/sh" 
Password: 
# 
Greg A. Woods
sumber
Oh Menarik. Apakah ada cara untuk melakukan itu sebagai satu perintah sehingga saya bisa menyembunyikannya di belakang alias?
Gregory Nisbet
Saya pikir saya menemukan yang lebih baik. su -- root -c "exec /bin/bash -l". (Saya pikir shell default saya secara khusus bukan bash bukan sh yang kebetulan menunjuk ke bash) Menyimpan saya di direktori yang sama, tetapi sumber /etc/profileatau /root/.profileatau yang lainnya sesuai.
Gregory Nisbet
seperti yang saya katakan, ada banyak cara! :-)
Greg A. Woods