Dash (-) di depan bash

14

Jika saya memeriksa shell bash saya di OS X (10.6.4) terminal, seperti dengan mengetik echo $0, ada sejumput di depan shell saya, seperti ini: -bash. Apa arti tanda hubung ini?

marshall.ward
sumber

Jawaban:

14

Itu berarti bashdipanggil sebagai shell login.


man bash mengatakan:

Shell login adalah karakter yang argumen pertama nol adalah a -, atau yang dimulai dengan --loginopsi.

Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan --loginopsi, bash pertama kali membaca dan mengeksekusi perintah dari file /etc/profile, jika file itu ada. Setelah membaca file itu, tampaknya untuk ~/.bash_profile, ~/.bash_logindan ~/.profile, agar, dan membaca dan mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca. The --noprofilepilihan mungkin digunakan ketika shell dimulai untuk menghambat perilaku ini.

Ketika shell login keluar, bash membaca dan mengeksekusi perintah dari file ~/.bash_logout, jika ada.


Anda akan menemukan login -pfdalam psoutput Anda , yang memulai shell login secara default.

Coba jalankan login -pfdan login -pfllihat perbedaannya. man loginmenjelaskan perbedaannya:

-lMemberitahu program yang dieksekusi dengan login bahwa ini bukan sesi login (dengan konvensi, sesi login ditandai ke program dengan tanda hubung sebagai karakter pertama argv[0]; opsi ini menonaktifkan itu), dan mencegahnya masuk chdir(2)ke direktori home pengguna . Standarnya adalah menambahkan tanda hubung (ini adalah sesi login).

Daniel Beck
sumber
Jawaban yang bagus, terima kasih atas penjelasannya dan mankutip
marshall.ward
1
Saya menggunakan ubuntu, dan saya melihat perilaku berbeda echo $0: jika saya mengetik echo $0di terminal yang dipanggil oleh ctrl + alt + f1, hasilnya adalah -bash; tetapi jika saya mengetiknya dalam termianl dipanggil oleh ctrl + alt + t, hasilnya adalah bash(tidak ada tanda hubung utama). Bisakah Anda menjelaskan mengapa?
Api Beku
@ frozen-flame One adalah shell login, yang lainnya tidak. Perhatikan bahwa terminal OS X dan terminal Linux memiliki perilaku yang berbeda dalam hal itu.
Daniel Beck
@DanielBeck itu bukan bukti bahwa yang lain bukan shell login. Ketika bash diluncurkan dengan --loginargumen, itu tidak berubah argv[0], tetapi bertindak sebagai shell login.
Ruslan
@Ruslan Tentu, secara teori itu masih bisa menjadi shell login. Tapi ternyata tidak. (Setidaknya saya akan sangat terkejut jika itu.)
Daniel Beck