Mengapa $ 0 disetel ke-bash?

8

Nama proses login pertama tampaknya diatur untuk -bash, tetapi jika saya subshell maka itu menjadi bash. sebagai contoh:

root@nowere:~# echo $0
-bash
root@nowere:~# bash
root@nowere:~# echo $0
bash

-bash menyebabkan beberapa skrip gagal, seperti . /usr/share/debconf/confmodule

exec /usr/share/debconf/frontend -bash
Can't exec "-bash": No such file or directory at /usr/share/perl/5.14/IPC/Open3.pm line 186.
open2: exec of -bash failed at /usr/share/perl5/Debconf/ConfModule.pm line 59

Adakah yang tahu alasan mengapa $0diatur -bash?

James Shimer
sumber
1
@ RaduRădeanu Tidak Berguna Penggunaan Kucing terlihat!
gniourf_gniourf

Jawaban:

5

Jika output dari echo $0perintah -bashitu berarti bashitu dipanggil sebagai shell login. man bashkata suatu tempat di baris 126:

A  login shell is one whose first character of argument zero is a -, or 
one started with the --login option.

Lihat lebih lanjut di sini: Perbedaan antara Shell Login dan Shell Non-Login .

Jadi shell Anda masih /bin/bash(ini dapat diperiksa dengan echo $SHELLperintah) dan saya sarankan Anda untuk menggunakan perintah yang memberi Anda kesalahan seperti biasa:

exec /usr/share/debconf/frontend bash
Radu Rădeanu
sumber
Terima kasih, memang terlihat bahwa login dengan benar menambahkan "-" ke nama proses shell login. Itu menjawab pertanyaan saya.
James Shimer