Saya memiliki fungsi bash yang didefinisikan dalam bashrc global, yang membutuhkan hak akses root untuk bekerja. Bagaimana saya bisa menjalankannya dengan sudo, mis sudo myfunction
. Secara default itu memberikan kesalahan:
sudo: myfunction: perintah tidak ditemukan
Jawaban:
Luca dengan ramah menunjuk saya ke pertanyaan ini, inilah pendekatan saya: Perluas fungsi / alias sebelum panggilan ke sudo dan berikan secara keseluruhan ke sudo, tidak perlu file temp.
Dijelaskan di sini di blog saya . Ada banyak penanganan kutipan :-)
Satu kelemahan dari pendekatan ini adalah hanya memperluas fungsi yang Anda panggil, bukan fungsi tambahan yang Anda rujuk dari sana. Pendekatan Kyle mungkin menangani itu lebih baik jika Anda mereferensikan fungsi-fungsi yang dimuat di bashrc Anda (asalkan dijalankan pada
bash -c
panggilan).sumber
Anda dapat
export
fungsi Anda untuk membuatnya tersedia untukbash -c
subkulit atau skrip tempat Anda ingin menggunakannya.Edit
Ini berfungsi untuk subshell langsung, tetapi tampaknya
sudo
tidak meneruskan fungsi (hanya variabel). Bahkan menggunakan berbagai kombinasisetenv
,env_keep
dan meniadakanenv_reset
sepertinya tidak membantu.Edit 2
Namun , tampak bahwa
su
tidak mendukung fungsi diekspor.sumber
bash: your_function: command not found
. Saya menggunakanUbuntu 11.04
danbash shell
.sudo -E bash -c 'your_function'
?Mungkin Anda bisa:
Ini akan berhasil dan menyelamatkan Anda dari mengetikkan sudo pada commandline.
sumber
Jika Anda perlu memanggil fungsi dalam konteks sudo, Anda ingin menggunakan
declare
:sumber
Saya akan mengeksekusi shell baru dengan memiliki sudo mengeksekusi shell itu sendiri, maka fungsinya akan berjalan dengan hak akses root. Misalnya sesuatu seperti:
Anda bahkan kemudian dapat membuat alias untuk
sudo bash
saluran juga.sumber
sumber
Seperti yang ditunjukkan oleh Legolas dalam komentar jawaban Dennis Williamson Anda harus membaca jawaban bmargulies pada pertanyaan serupa yang diposting di stackoverflow.
Mulai dari itu saya menulis fungsi untuk membahas masalah ini, yang pada dasarnya mewujudkan gagasan bmargulies.
Contoh penggunaan:
menjalankan cuplikan berikut
Akan menghasilkan
Jika Anda perlu menggunakan ini dalam shell memanggil fungsi yang didefinisikan dalam bashrc Anda, seperti yang Anda minta, maka Anda harus meletakkan fungsi exesudo sebelumnya pada file bashrc yang sama juga, seperti berikut:
Maka Anda harus keluar dan masuk lagi atau menggunakan
Akhirnya Anda dapat menggunakan exesudo sebagai berikut:
sumber
/dev/shm/22481: No such file or directory
.