Когда вы вводите неверную команду в приглашении 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, ...? Я спрашиваю, потому что, может быть, это какая-то конкретная реализация, поставленная перед сообщением об ошибке по умолчанию, и это ничего не значит ... может быть.