Коли ви введете недійсну команду під час запиту bash, ви отримаєте повідомлення
-bash: {command}: command not found
Що означає -
на самому початку?
ssh computername
і ваша команда не рахує копіювати.
Коли ви введете недійсну команду під час запиту bash, ви отримаєте повідомлення
-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
, але це само по собі не говорить , що це Ввійти оболонка, і є дуже хороший шанс , що ОП не використовується exec -l
взагалі . Частина документації, яка говорить про те, що -bash
робить її оболонкою для входу, - це "ІНВОКАЦІЯ" Оболонка входу - це той, чий перший символ аргументу нульовий - -, або той, що розпочався з опції --login. "
bash
термінологія, а конвенція Unix + індексація C: Кожна програма отримує список параметрів, початковий запис яких - назва програми, а потім - аргументи. Оскільки масиви C індексуються, починаючи з нуля, аргумент нуль (тобто нульовий аргумент) - це назва програми, а фактичні аргументи починаються з індексу 1.
Інша відповідь - це добре, наскільки це стосується, але варто згадати, що функція є загальнішою, ніж баш.
З давніх часів login
програма передбачувала тире, argv[0]
коли вона виконує оболонку користувача, і оболонка визнала це ознакою того, що вона повинна вести себе як "оболонка входу". Це задокументовано на сторінках V7 man тут: login (1) , sh (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
варіант не існує в класичній оболонці Bourne або оригінальному csh, але у більшості нових оболонок (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish та будь-яка напівновіша версія csh) є.
-l
опція, вона login
все ще не використовується. Очікується, що всі оболонки розпізнають префікс argv[0]
як "офіційний" механізм.
jhgjbjbkjln: command not found
- немає-bash:
. Ви використовуєтеbash
в Unix, Linux, OSX, ...? Я запитую, тому що, можливо, це щось конкретне реалізація, поставлене перед повідомленням про помилку за замовчуванням, і це нічого не означає ... можливо.