Di saya .profile
, saya menggunakan kode berikut untuk memastikan bahwa alias dan fungsi terkait Bash hanya bersumber jika shell login sebenarnya adalah Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Saat ini saya sedang dalam proses meletakkan file konfigurasi shell, skrip dan fungsi saya di bawah kontrol versi. Saya juga baru saja mulai proses menghilangkan Bashisms kasual dari script shell yang tidak mendapatkan keuntungan dari fitur Bash-spesifik, misalnya, mengganti function funcname()
dengan funcname()
.
Untuk repositori file shell saya, saya telah mengonfigurasi hook pre-commit yang menjalankan checkbashisms
utilitas dari paket devscripts Debian pada setiap sh
file dalam repositori untuk memastikan bahwa saya tidak secara tidak sengaja memperkenalkan sintaks spesifik-Bash. Namun, ini memunculkan kesalahan untuk .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Saya bertanya-tanya apakah ada cara untuk memeriksa shell mana yang berjalan yang tidak akan memicu peringatan checkbashisms
.
Saya memeriksa daftar variabel terkait shell yang terdaftar oleh POSIX dengan harapan salah satu dari mereka dapat digunakan untuk menampilkan shell saat ini. Saya juga telah melihat variabel yang ditetapkan dalam shell Dash interaktif tetapi, sekali lagi, gagal menemukan kandidat yang cocok.
Saat ini, saya sudah dikecualikan .profile
dari sedang diproses oleh checkbashisms
; ini adalah file kecil sehingga tidak sulit untuk memeriksanya secara manual. Namun, setelah meneliti masalah ini, saya masih ingin tahu apakah ada metode yang sesuai dengan POSIX untuk menentukan shell mana yang berjalan (atau setidaknya cara yang tidak menyebabkan checkbashisms
kegagalan).
Latar belakang / klarifikasi lebih lanjut
Salah satu alasan saya meletakkan file konfigurasi shell saya di bawah kontrol versi adalah untuk mengkonfigurasi lingkungan saya di semua sistem yang saya masuki secara teratur: Cygwin, Ubuntu dan CentOS (keduanya 5 dan 7, menggunakan Active Directory untuk pengguna autentikasi). Saya paling sering masuk melalui X Windows / lingkungan desktop dan SSH untuk host jarak jauh. Namun, saya ingin ini menjadi bukti masa depan dan memiliki sedikit ketergantungan pada ketergantungan sistem dan alat lain mungkin.
Saya telah menggunakan checkbashisms
sebagai pemeriksaan kewarasan otomatis sederhana untuk sintaksis file terkait shell saya. Ini bukan alat yang sempurna, misalnya, saya sudah menerapkan tambalan sehingga tidak mengeluh tentang penggunaan command -v
dalam skrip saya. Saat meneliti, saya telah belajar bahwa tujuan sebenarnya dari program ini adalah untuk memastikan kepatuhan dengan kebijakan Debian yang, seperti yang saya pahami, didasarkan pada POSIX 2004 dan bukan 2008 (atau revisi 2013).
.bash_profile
sumber yang keduanya .profile
dan (kondisional) .bashrc
.