Когда вы вводите неверную команду в приглашении bash, вы получаете сообщение
-bash: {command}: command not found
Что означает -
в самом начале?
ssh computername
и ваша команда не рассчитывать на репликацию.
Когда вы вводите неверную команду в приглашении bash, вы получаете сообщение
-bash: {command}: command not found
Что означает -
в самом начале?
ssh computername
и ваша команда не рассчитывать на репликацию.
Ответы:
Это означает, что это оболочка входа в систему.
От man bash
:
Оболочка входа - это та, чей первый символ аргумента ноль - -, или тот, который начинается с опции --login.
(В bash
терминологии аргумент «ноль» - это имя команды, которое, в вашем случае, было 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.
Другой ответ вполне подходит, но стоит упомянуть, что эта функция является более общей, чем bash.
С древних времен login
программа добавляла тире к argv[0]
выполнению пользовательской оболочки, и оболочка распознала это как знак того, что она должна вести себя как «оболочка входа в систему». Это задокументировано в справочных страницах V7 здесь: login (1) , sh (1) .
Все программы, предоставляющие службу входа в систему (аутентификацию пользователя и запуск оболочки), должны следовать правилу «prepend dash». Например, 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, ...? Я спрашиваю, потому что, может быть, это какая-то конкретная реализация, поставленная перед сообщением об ошибке по умолчанию, и это ничего не значит ... может быть.