Tetap di direktori kerja yang sama saat berganti ke sudo

25

Saat bekerja pada baris perintah, saya sering mengganti ke sudo menggunakan sudo -i. Namun, direktori kerja saya berubah secara otomatis menjadi /root. Saya tidak pernah ingin pergi ke sana; Saya ingin tetap di tempat saya! Bagaimana saya bisa mencapai ini?

Pasang kembali Monica
sumber

Jawaban:

28

Anda dapat menggunakannya sudo -ssebagai gantinya, itu tidak akan mengubah direktori Anda saat ini /root, meskipun beberapa variabel lingkungan Anda tidak akan menjadi root.

Halaman ini dari Forum Ubuntu memiliki ringkasan yang bagus:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

Halaman ini dari dokumentasi Ubuntu memiliki lebih banyak informasi latar belakang tentang sudo .

Levon
sumber
1
Indah! Terima kasih banyak, ikhtisar sederhana tapi bagus!
Pasang kembali Monica
@ user1162541 Senang bisa membantu.
Levon
sudo -iubekerja untuk saya ubuntuforums.org/…
rofrol
Selama pengujian saya, vv dari sudo -imasih rusak oleh vv. Satu-satunya cara untuk menghindari hal ini adalah menggunakan su -l.
Simba
5

Jika Anda ingin menggunakan su, ada cara untuk tetap berada di direktori yang sama.

su - user -c "cd` pwd`; bash "

Apa yang terjadi di sini:

  • su - user = masuk sebagai user
  • -c yang berarti "jalankan perintah di shell pengguna baru"
  • -c "cd `pwd`"perintah yang kita berikan adalah untuk beralih ke direktori saat ini ( `pwd`) - tetapi karena kita menggunakan backticks dalam tanda kutip ganda, pwdperintah tersebut dievaluasi sebelum kita menjalankan superintah, sehingga kita benar-benar beralih ke direktori yang kita berada di SEKARANG seperti yang lama pengguna.

    • Sebaliknya, -c 'cd `pwd`'akan menjalankan pwdperintah di shell baru, jadi ini akan mengevaluasi cd /root, yang, tentu saja, tidak akan mencapai apa pun.

    Satu-satunya masalah di sini adalah bahwa shell baru keluar tepat setelah menjalankan perintah, jadi kami menambahkan:

  • -c "cd `pwd`; bash"yang berarti "jalankan bash(shell baru) setelah menjalankan cdperintah. Shell bash tidak keluar sampai kita keluar.

Perhatikan bahwa Anda dapat menggantinya `pwd`dengan $(pwd). Secara fungsional mereka sama, tetapi banyaknya karakter seperti kutipan bisa menjadi sulit dibaca.

will.barley
sumber
0

Saya telah menghadapi masalah yang sama dan saya tidak diizinkan menjalankan apa pun selain sudo su - devuserdi server dev, jadi inilah yang saya kemukakan:

  1. Dalam. Profil profil beralih kembali ke rumah pengguna sebelumnya jika ditemukan:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Sebuah skrip untuk menentukan pengguna sebelumnya. Script ditempatkan di direktori bin devuser:
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

Ini naik pohon proses dan memeriksa apakah proses yang memiliki pengguna berubah.

reimai
sumber