Saya bertanya-tanya apakah ada cara untuk mengetahui shell default dari pengguna saat ini dalam skrip shell?
Use case: Saya sedang mengerjakan skrip yang menetapkan alias untuk suatu perintah dan alias ini diatur dalam skrip shell.
!# /bin/bash
alias = 'some command to set the alias'
Ada logika di skrip tempat skrip mencoba menemukan shell default dari pengguna yang mengeksekusi skrip dan menambahkan alias ini di masing-masing file ~ / .bashrc atau ~ / .zshrc
Tetapi ketika saya menambahkan shebang di bagian depan skrip dan secara eksplisit memintanya untuk menggunakan bash, jawaban yang diposting di sini selalu mengembalikan bash seperti yang diharapkan walaupun saya mengeksekusi skrip ini pada terminal ZSH.
Apakah ada cara untuk mendapatkan tipe shell di mana skrip dieksekusi terlepas dari set shebang?
Saya mencari solusi yang berfungsi pada Mac dan semua bistro berbasis linux.
sumber
/etc/passwd
ada di OSX? Saya sempat melihat-lihat online dan tampaknya shell ada di sana, hanya saja bukan nama pengguna. Namun, ID pengguna masih ada, mengapa Anda tidak menggunakannya?Jawaban:
sumber
finger $USER | grep 'Shell:*' | cut -f3 -d ":"
karena opsi grep -P tidak didukung pada Mac.finger
mungkin tidak diinstal pada semua mesin. Ini adalah paket opsional pada sistem berbasis RedHat.getent|grep ^$USER:|cut -f: -f7
alih-alih jari, jika jari tidak dipasang secara default.SHELL
variabel lingkungan jika ada. Melihat basis data pengguna akan memberi Anda hasil (shell login pengguna) tetapi itu mungkin bukan hasil yang tepat (shell interaktif favorit pengguna) - tergantung pada konfigurasi pengguna.Variabel lingkungan,
SHELL
akan selalu mengembang ke shell login default dari pengguna yang memanggil (mendapatkan nilai dari/etc/passwd
).Untuk pengguna lain mana pun, Anda perlu melakukan beberapa pemrosesan
/etc/passwd
, berikut adalahawk
cuplikan sederhana :Ganti
foobar
dengan nama pengguna yang sebenarnya.Jika Anda memiliki
ldap
(atau sesuatu yang serupa di tempat), gunakangetent
untuk mendapatkan database daripada langsung menguraikan/etc/passwd
:atau pendekatan terbersih, mari
getent
lakukan parsing (terima kasih kepada @Kusalananda):sumber
getent passwd foobar
untuk melewati harus mencocokkan garis tertentu.Karena
getent
bukan perintah standar pada MacOS, Anda mungkin ingin menggunakangetpwuid
panggilan tingkat bawah yang akan berkonsultasi dengan layanan penamaan yang dikonfigurasikan oleh mesin. Ini mungkin memerlukan panggilan keperl
ataupython
, yang sangat umum di sebagian besar platform mirip Unixmis. ini akan mengembalikan shell untuk pengguna saat ini:
sumber
Anda bisa mendapatkan shell default pengguna dari lingkungan seperti ini:
Tapi tidak seperti ini:
Yang terakhir hanya akan memberi tahu Anda apa shell script Anda sedang menggunakan. Jadi Anda ingin opsi pertama di atas.
sumber
Pendek dan tidak menyakitkan:
sumber
Mungkin ini:
sumber
USER=fred
maka ini akan cocokfred
,frederick
,alfred
,alfredo
...