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?

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).


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.