Khi bạn nhập một lệnh không hợp lệ tại dấu nhắc bash, bạn nhận được thông báo
-bash: {command}: command not found
Những gì -
ngay từ đầu có nghĩa là gì?
ssh computername
và lệnh không đếm của bạn để nhân rộng.
Khi bạn nhập một lệnh không hợp lệ tại dấu nhắc bash, bạn nhận được thông báo
-bash: {command}: command not found
Những gì -
ngay từ đầu có nghĩa là gì?
ssh computername
và lệnh không đếm của bạn để nhân rộng.
Câu trả lời:
Nó có nghĩa là nó là một vỏ đăng nhập.
Từ man bash
:
Một vỏ đăng nhập là một vỏ có ký tự đầu tiên của đối số 0 là - hoặc bắt đầu bằng tùy chọn --login.
(Theo bash
thuật ngữ, đối số "zeroth" là tên lệnh, trong trường hợp của bạn là bash
.) bash
Sử dụng điều này như một tín hiệu để thực hiện các hoạt động đăng nhập như thực thi .bash_profile
, v.v.
Một cách mà dấu gạch ngang có thể được thêm tự động là nếu vỏ được bắt đầu bằng exec
. Từ hướng dẫn Bash :
exec [-cl] [-a name] [command [arguments]]
[...] Nếu
-l
tùy chọn được cung cấp, shell sẽ đặt dấu gạch ngang ở đầu đối số zeroth được truyền cho lệnh .
So sánh hai lần thử này để chạy lệnh nonexistent
. Đầu tiên không có -l
:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
Và, thứ hai, với:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -l
prepends một dấu gạch ngang là một cách thể có khả năng gây bash được chạy như -bash
, nhưng điều đó tự nó không nói rằng đó là một vỏ đăng nhập, và có một cơ hội rất tốt mà OP đã không được sử dụng exec -l
ở tất cả các . Một phần của tài liệu nói rằng -bash
làm cho nó một vỏ đăng nhập là "HÓA ĐƠN Một vỏ đăng nhập là một ký tự đầu tiên của đối số 0 là - hoặc một bắt đầu bằng tùy chọn --login."
bash
thuật ngữ, nhưng quy ước Unix + lập chỉ mục C: Mỗi chương trình được thông qua một danh sách tham số, với mục nhập ban đầu là tên chương trình, theo sau là các đối số. Vì các mảng C được lập chỉ mục bắt đầu bằng 0, nên đối số 0 (nghĩa là đối số zeroth) là tên chương trình và các đối số thực tế bắt đầu bằng chỉ mục 1.
Câu trả lời khác là tốt cho đến nay, nhưng điều đáng nói là tính năng này chung chung hơn bash.
Từ thời xa xưa, login
chương trình đã chuẩn bị một dấu gạch ngang argv[0]
khi nó thực thi trình bao của người dùng và trình bao đã nhận ra đây là một dấu hiệu cho thấy nó nên hoạt động như một "vỏ đăng nhập". Nó được ghi lại trong các trang của V7 tại đây: login (1) , sh (1) .
Tất cả các chương trình cung cấp dịch vụ giống như đăng nhập (xác thực người dùng và chạy shell) phải tuân theo quy tắc "dấu gạch đầu dòng". Ví dụ: sshd thực hiện như bạn có thể thấy trong ssh / session.c dưới bình luận này:
/*
* 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.
*/
Tất cả các vỏ nhận ra dấu gạch ngang hàng đầu. -l
Tùy chọn tương đương không tồn tại trong shell Bourne cổ điển hoặc csh gốc, nhưng hầu hết các shell mới hơn (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish và bất kỳ phiên bản bán gần đây nào của csh) đều có nó.
-l
tùy chọn, login
vẫn không sử dụng nó. Tất cả các shell được dự kiến sẽ nhận ra tiền tố trên argv[0]
là cơ chế "chính thức".
jhgjbjbkjln: command not found
- không có-bash:
trong đó. Bạn đang sử dụngbash
trong Unix, Linux, OSX, ...? Tôi hỏi bởi vì có thể đây là một cái gì đó được triển khai cụ thể đặt trước thông báo lỗi theo mặc định và nó không có nghĩa gì cả ... có thể.