Apakah ada cara agar saya dapat meneruskan suatu Fungsi dari satu pengguna ke pengguna lain?
Misalnya, saya memiliki skrip Bash kecil yang saya jalankan sebagai Root:
#!/bin/bash
user_func(){
whoami
exit
}
su vagrant -c 'user_func'
Namun, Fungsi user_func tidak ditentukan untuk pengguna Vagrant, hanya untuk Root, dan tidak dapat dijalankan.
Opsi saya yang lain adalah memiliki beberapa baris
su vagrant -c 'cmd1'
su vagrant -c 'cmd2'
, etc
Atau, jalankan beberapa perintah, misalnya:, su vagrant -c 'cmd1; cmd2; cmd3;'
tapi saya lebih suka tidak memiliki kelebihan, terutama ketika mencoba menjalankan lebih dari 5 perintah sebagai pengguna Vagrant.
Apakah mungkin untuk meneruskan Fungsi ke pengguna lain dari dalam skrip yang sama (mis. Tidak membuat skrip pada disk sebagai pengguna yang berbeda dan kemudian menjalankan skrip yang dihasilkan)? Atau adakah pilihan lain yang saya abaikan?
su
menimpa lingkungan.vagrant
isbash
. Jika tidak,su vagrant -c 'bash -c user_func'
Ini agak meretas, tetapi Anda dapat mencetak definisi fungsi di dalam perintah yang diteruskan
su
dan tentu saja Anda dapat menggunakannya.Ini akan berfungsi bahkan jika karena alasan tertentu lingkungan shell yang
su
dihasilkan akan ditimpa, karena ia meletakkan definisi setelah inisialisasi shell. Jika Anda menulis fungsi ini cukup kompatibel, itu bahkan akan berfungsi ketika dua pengguna yang bersangkutan menggunakan cangkang yang berbeda.sumber
su
shell ditimpa oleh faktor-faktor eksternal? Maksud saya, dalam hal ini Anda memiliki kontrol penuh atassu
baris perintah karena itu dalam skrip. Bagaimana lingkungan shell yang baru ditimpa?su
mungkin melakukan inisialisasi lingkungan. Jugasu
itu sendiri mungkin menghapus beberapa lingkungan penelepon untuk sedikit memperketat keamanan (meskipun ini biasanya dilakukan oleh alternatif yang lebih kuat sepertisudo
).Itu bukan skrip yang Anda miliki, ini sebuah fungsi. Tapi sepertinya Anda menginginkan skrip. Buat skrip yang tepat dan letakkan, sesuai kebutuhan Anda, baik di dalam
/usr/local/bin
, atau di dalam/home/vagrant/bin
, dan daripada yang seharusnya bisa Anda lakukansu vagrant -c '/home/vagrant/bin/myscript.sh'
sumber
Cara lain yang agak lebih portabel untuk melakukan ini (tanpa ketergantungan bash) adalah membuat skrip memanggil dirinya sendiri dan mengubah perilakunya berdasarkan konteks (uid) atau parameter. contoh dari ini diberikan dalam dokumentasi di
super
mana mereka menunjukkan skrip yang membutuhkan izin root, memanggil dirinya sendiri melalui super ketika tidak melakukan root.sumber