Какая программа принимает команды командной строки?

Какая программа принимает команды командной строки?

Когда вы пишете в терминале «vim filename», я знаю, что vim получает filename в качестве параметра, но предполагаю, что и программа тоже получает vim в качестве параметра... это просто эмулятор терминала или другая программа?

решение1

В тот момент, когда вы вводите данные vim filenameв командной строке, оболочка уже запущена, поэтому оболочка (и эмулятор терминала) не получает vimаргумент командной строки.

vim, с другой стороны, делает, но это не доступно пользователю. Когда программа запускается, ее имяобычнозадан как нулевой аргумент командной строки. Вы можете увидеть это, запустив оболочку и выполнив команду echo $0:

$ sh
$ echo $0
sh
$ exit

Оболочка выполняет команды в командной строке с помощью execve()(или аналогичной exec()функции), чьяСпецификация POSIXговорит

Значение argv[0]должно указывать на строку имени файла, связанную с процессом, запускаемым одной из функций exec.

argv[0]в тексте выше соответствует $0в скрипте оболочки.

В разделе «Обоснование» далее говорится:

Требование к приложению, строго соответствующему POSIX, также гласит, чтозначение, переданное в качестве первого аргумента, должно быть строкой имени файла, связанной с запускаемым процессом. Хотя некоторые существующие приложения передают имя пути, а не строку имени файла в некоторых обстоятельствах, строка имени файла более полезна, поскольку обычно используется argv[0]при печати диагностики. В некоторых случаях переданное имя файла не является фактическим именем файла; например, многие реализации утилиты входа используют соглашение о добавлении префикса <hyphen-minus>( -) к фактическому имени файла, что указывает вызываемому интерпретатору команд, что это «оболочка входа».

Связанный контент