ทำไม $ 0 ถูกตั้งค่าเป็น -bash


8

ชื่อกระบวนการเข้าสู่ระบบครั้งแรกดูเหมือนว่าจะถูกตั้งค่าให้-bashแต่ถ้าผม subshell bashแล้วมันจะกลายเป็น ตัวอย่างเช่น:

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

-bash กำลังทำให้สคริปต์บางตัวล้มเหลวเช่น . /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

ใครรู้เหตุผลว่าทำไมถึง$0ตั้งค่า-bash?


1
@ RaduRădeanuใช้แมวไร้ประโยชน์แล้ว!
gniourf_gniourf

คำตอบ:


5

หากเอาต์พุตของecho $0คำสั่งคือ-bashหมายความว่า bashถูกเรียกใช้เป็นเชลล์ล็อกอิน man bashพูดที่บรรทัดที่ 126:

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับที่นี่: ความแตกต่างระหว่างการเข้าสู่ระบบเชลล์และไม่เข้าสู่ระบบเชลล์

ดังนั้นเชลล์ของคุณยังคงอยู่/bin/bash(ซึ่งสามารถตรวจสอบได้ด้วยecho $SHELLคำสั่ง) และฉันขอแนะนำให้คุณใช้คำสั่งที่ให้ข้อผิดพลาดตามปกติ:

exec /usr/share/debconf/frontend bash

ขอบคุณดูเหมือนว่าการลงชื่อเข้าใช้นั้นเพิ่ม "-" ลงในชื่อกระบวนการเชลล์ล็อกอินอย่างถูกต้อง นั่นตอบคำถามของฉัน
James Shimer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.