simpan alias ketika saya menggunakan sudo bash

9

Saya memiliki server Centos 5.5 yang memiliki perintah alias saya sendiri untuk akun saya. Ketika saya melakukannya sudo bashsaya masih bisa menggunakan alias itu, saya tidak perlu menambahkan alias ke root .bashrc.

Saya memiliki server lain yaitu Centos 6.5. Tetapi ketika saya mengeksekusi sudo bash, itu tidak akan menggunakan alias saya dari pengguna yang saya login sebagai. Adakah yang tahu di mana saya mengkonfigurasinya untuk memasukkan alias dari pengguna yang saya masuki saat saya gunakan sudo bash?

Tyler Knotek
sumber
Saya pikir alias diwarisi melalui lingkungan, jadi mungkin jawabannya di sini akan berfungsi: unix.stackexchange.com/questions/92998/…
Barmar
5.5 yang mungkin menghemat $ HOME dari pemanggil, sementara 6.5 tidak. Lihat sudo sudo -Voutput dan env_keepdi halaman manual sudoers.
Stéphane Chazelas
1
Terima kasih Barmar dan Stephane. Kedua jawaban Anda menunjuk saya ke arah yang benar. Saya harus mengatur yang berikut ini dalam sudoers: Defaults !always_set_homedan Defaults !env_reset`
Tyler Knotek

Jawaban:

6

Tambahkan baris berikut ke ~ / .bashrc Anda:

alias sudo='sudo '

Dari manual bash

Alias ​​memungkinkan string untuk diganti dengan kata ketika itu digunakan sebagai kata pertama dari perintah sederhana. Shell memelihara daftar alias yang mungkin diatur dan tidak disetel dengan perintah builtin alias dan unalias.

Kata pertama dari setiap perintah sederhana, jika tidak dikutip, diperiksa untuk melihat apakah ada alias. Jika demikian, kata itu diganti dengan teks alias. Karakter '/', '$', '`', '=' dan salah satu dari metakarakter shell atau mengutip karakter yang tercantum di atas mungkin tidak muncul dalam nama alias. Teks pengganti dapat berisi input shell yang valid, termasuk karakter meta shell. Kata pertama dari teks pengganti diuji untuk alias, tetapi kata yang identik dengan alias yang diperluas tidak diperluas untuk kedua kalinya. Ini berarti bahwa seseorang mungkin alias ls ke "ls-F", misalnya, dan Bash tidak mencoba memperluas teks pengganti secara rekursif. Jika karakter terakhir dari nilai alias adalah spasi atau karakter tab, maka kata perintah berikutnya setelah alias juga diperiksa untuk ekspansi alias.

Jadi Bash hanya memeriksa kata pertama dari sebuah perintah untuk alias, kata-kata setelah itu tidak dicentang. Itu berarti dalam perintah seperti sudo ll, hanya kata pertama (sudo) diperiksa oleh bash untuk alias, ll diabaikan. Kita dapat memberi tahu bash untuk memeriksa kata berikutnya setelah alias (yaitu sudo) dengan menambahkan spasi di akhir nilai alias.

Antonizick
sumber
Bekerja untuk zsh juga baik-baik saja. Terima kasih!
dzhi
Ini hanya memungkinkan untuk menggunakan alias dalam sudoperintah, misalnya sudo some_alias ..., tetapi yang ditanyakan OP adalah bagaimana membuat alias didefinisikan untuk pekerjaan penggunanya sendiri setelah ia beralih ke pengguna lain yang menggunakan sudo. Katakanlah saya telah some_aliasmendefinisikan. Ketika saya sudountuk rootmenggunakan sudo su, lingkungan baru dibuat dan bahwa alias tidak didefinisikan ada. Ada -Eparameter dari sudoperintah yang seharusnya mengekspor lingkungan tetapi sepertinya alias bukan bagian dari itu.
David Ferenczy Rogožan
0

Gunakan sudo -E, yang akan mengekspor lingkungan Anda.

kaboom
sumber
3
tidak termasuk alias (diuji pada Ubuntu 16.04.1)
Antonios Hadjigeorgalis
Ini bekerja tetapi hanya sebagai sudo -E bash. Ketika digunakan dengan susebagai sudo -E su, hal-hal yang didefinisikan dalam pengguna .bashrc(alias, prompt, dll.) Tidak dipertahankan, meskipun sepertinya variabel lingkungan dipertahankan dalam kedua kasus. Saya tidak yakin bagaimana tepatnya ini bekerja.
David Ferenczy Rogožan