เมื่อคุณป้อนคำสั่งที่ไม่ถูกต้องที่ bash prompt คุณจะได้รับข้อความ
-bash: {command}: command not found
อะไร-ที่มีความหมายว่าจุดเริ่มต้นมาก?
ssh computernameและคำสั่งไม่นับเพื่อทำซ้ำ
เมื่อคุณป้อนคำสั่งที่ไม่ถูกต้องที่ bash prompt คุณจะได้รับข้อความ
-bash: {command}: command not found
อะไร-ที่มีความหมายว่าจุดเริ่มต้นมาก?
ssh computernameและคำสั่งไม่นับเพื่อทำซ้ำ
คำตอบ:
มันหมายความว่ามันเป็นเปลือกเข้าสู่ระบบ
จากman bash:
เปลือกเข้าสู่ระบบเป็นหนึ่งที่มีอักขระตัวแรกของศูนย์อาร์กิวเมนต์เป็น - หรือหนึ่งเริ่มต้นด้วยตัวเลือก --login
(ในbashคำศัพท์อาร์กิวเมนต์ "zeroth" คือชื่อคำสั่งซึ่งในกรณีของคุณเป็นbash) bashใช้สิ่งนี้เป็นสัญญาณในการทำกิจกรรมการเข้าสู่ระบบเช่นการดำเนินการ.bash_profileฯลฯ
execวิธีหนึ่งที่รีบอาจจะเพิ่มโดยอัตโนมัติคือถ้าเปลือกจะเริ่มต้นด้วย จากคู่มือ Bash :
exec [-cl] [-a name] [command [arguments]][ ... ] ถ้า
-lตัวเลือกจะถูกส่งให้เปลือกวางเส้นประที่จุดเริ่มต้นของการโต้แย้งข้อที่ศูนย์ที่ส่งผ่านไปยังคำสั่ง
nonexistentเปรียบเทียบทั้งสองพยายามที่จะเรียกใช้คำสั่ง ก่อนโดยไม่ต้อง-l:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
และที่สองด้วย:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -lผนวกเส้นประเป็นวิธีที่เป็นไปได้ที่อาจทำให้ bash ทำงานได้-bashแต่ด้วยตัวของมันเองไม่ได้บอกว่ามันเป็นเปลือกเข้าสู่ระบบและมีโอกาสที่ดีที่ OP ไม่ได้ใช้exec -lเลย . ส่วนของเอกสารที่ระบุว่า-bashทำให้เชลล์ล็อกอินคือ "INVOCATION เชลล์ล็อกอินคือหนึ่งในนั้นที่อักขระตัวแรกของอาร์กิวเมนต์ศูนย์คือ - หรือหนึ่งเริ่มด้วยตัวเลือก --login"
bashคำศัพท์ แต่การทำดัชนีแบบ Unix + C: แต่ละโปรแกรมได้รับการส่งผ่านรายการพารามิเตอร์ซึ่งรายการเริ่มต้นคือชื่อโปรแกรมตามด้วยอาร์กิวเมนต์ ตั้งแต่อาร์เรย์ C มีการสร้างดัชนีเริ่มต้นด้วยศูนย์อาร์กิวเมนต์ศูนย์ (นั่นคือการโต้แย้งข้อที่ศูนย์) เป็นชื่อโปรแกรมและข้อโต้แย้งที่เกิดขึ้นจริงเริ่มต้นด้วยดัชนี 1.
คำตอบอื่น ๆ นั้นใช้ได้ตราบใดที่มันไป แต่มันก็คุ้มค่าที่จะกล่าวถึงว่าคุณสมบัติทั่วไปนั้นดีกว่าการทุบตี
ตั้งแต่สมัยโบราณloginโปรแกรมได้เพิ่มขีดประargv[0]เมื่อมันประมวลผลเชลล์ของผู้ใช้และเชลล์ยอมรับว่านี่เป็นสัญญาณว่ามันควรจะทำตัวเป็น "เชลล์เข้าสู่ระบบ" มันถูกบันทึกไว้ในหน้าคน V7 ที่นี่: เข้าสู่ระบบ (1) , ดวลจุดโทษ (1)
โปรแกรมทั้งหมดที่ให้บริการเหมือนเข้าสู่ระบบ (รับรองความถูกต้องของผู้ใช้และเรียกใช้เชลล์) ควรเป็นไปตามกฎ ตัวอย่างเช่น sshd ทำตามที่คุณเห็นในssh / session.cภายใต้ความคิดเห็นนี้:
/*
* If we have no command, execute the shell. In this case, the shell
* name to be passed in argv[0] is preceded by '-' to indicate that
* this is a login shell.
*/
เชลล์ทั้งหมดรู้จักเส้นนำหน้า -lตัวเลือกที่เทียบเท่าไม่มีอยู่ในเชลล์เป้าหมายคลาสสิกหรือ csh ดั้งเดิม แต่เชลล์ที่ใหม่กว่าส่วนใหญ่ (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish และ csh เวอร์ชันกึ่งล่าสุด) มีอยู่
-lตัวเลือก แต่loginก็ยังไม่ได้ใช้ เชลล์ทั้งหมดคาดว่าจะรู้จักคำนำหน้าบนargv[0]เป็นกลไก "ทางการ"
jhgjbjbkjln: command not found- ไม่-bash:อยู่ในนั้น คุณใช้bashใน Unix, Linux, OSX, ... หรือไม่ ฉันถามเพราะอาจเป็นสิ่งที่การใช้งานเฉพาะวางไว้ก่อนข้อความแสดงข้อผิดพลาดโดยค่าเริ่มต้นและมันไม่ได้หมายความว่าอะไร ...