Как именно вы выполняете команду? Я пытался повторить, но я не получаю те же результаты - например> jhgjbjbkjln: command not found- нет -bash: там. Вы используете bashв Unix, Linux, OSX, ...? Я спрашиваю, потому что, может быть, это какая-то конкретная реализация, поставленная перед сообщением об ошибке по умолчанию, и это ничего не значит ... может быть.
jimm-cl
@jim Попробуйте, ssh computernameи ваша команда не рассчитывать на репликацию.
Бернхард
Ответы:
27
Это означает, что это оболочка входа в систему.
От 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».
HVd
@hvd, согласился. Несмотря на правильность, этот ответ не имеет смысла.
Стефан Шазелас
1
«Нулевой аргумент» - это не bashтерминология, а соглашение Unix + индексирование C: каждой программе передается список параметров, исходная запись которого - имя программы, за которой следуют аргументы. Поскольку массивы C индексируются, начиная с нуля, аргумент ноль (то есть нулевой аргумент) - это имя программы, а фактические аргументы начинаются с индекса 1.
celtschk
15
Другой ответ вполне подходит, но стоит упомянуть, что эта функция является более общей, чем 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, ...? Я спрашиваю, потому что, может быть, это какая-то конкретная реализация, поставленная перед сообщением об ошибке по умолчанию, и это ничего не значит ... может быть.ssh computername
и ваша команда не рассчитывать на репликацию.Ответы:
Это означает, что это оболочка входа в систему.
От
man bash
:(В
bash
терминологии аргумент «ноль» - это имя команды, которое, в вашем случае, былоbash
.)bash
Использует это в качестве сигнала для выполнения действий входа в систему, таких как выполнение.bash_profile
и т. Д.Одним из способов автоматического добавления дефиса является запуск оболочки
exec
. Из руководства Bash :пример
Сравните эти две попытки запустить команду
nonexistent
. Сначала без-l
:И, во-вторых, с:
источник
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 под этим комментарием:
Все снаряды распознают ведущую черту. Эквивалентной
-l
опции не существует в классической оболочке Bourne или в оригинальном csh, но большинство новых оболочек (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish и в любой недавней версии csh) имеют ее.источник
-l
опция, онаlogin
все равно не используется. Ожидается, что все оболочки распознают префиксargv[0]
как «официальный» механизм.