В каком пакете находится команда 'cd'?

Если вы хотите находиться в подкаталоге bin текущего каталога, который является ./bin, так:

export PATH=./bin:$PATH
1
задан 12 March 2016 в 06:45

4 ответа

cd обязательно является встроенной оболочкой. Если оболочка породила дочерний процесс, который изменил рабочий каталог и затем вышел из него, родительский процесс (сама оболочка) не будет затронут.

Что касается исходного кода cd, все, что ему нужно do - это вызов chdir(2), который изменяет рабочий каталог процесса. См. Chdir на opengroup.org, где указано:

Функция chdir () должна вызвать каталог, названный именем пути, на который указывает аргумент path, чтобы стать текущим рабочим каталогом; то есть отправной точкой для поиска пути для путей, не начинающихся с '/'.
24
ответ дан 23 May 2018 в 12:55

Вот справочная страница для cd, но она не является официальной, так как cd является частью «команд встроенной оболочки». Как и некоторые другие команды ...

alias, bg, bind, break, builtin, command, compgen, complete, 
continue, declare, dirs, disown, echo, enable, eval, exec, exit, 
export, fc, fg, getopts, hash, help, history, jobs, kill, let, local, 
logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, 
shopt, source, suspend, test, times, trap, type, typeset, ulimit,
umask, unalias, unset, wait 

См. Справочную страницу для страницы man для cd . Из ссылки cd:

cd [-L | -P] [dir] Измените текущий каталог на каталог. Переменная HOME - это директория по умолчанию. Переменная CDPATH определяет путь поиска для каталога, содержащего каталог. Альтернативные имена каталогов в CDPATH разделяются двоеточием (:). Нулевое имя каталога в CDPATH совпадает с текущим каталогом, то есть «.». Если dir начинается с косой черты (/), то CDPATH не используется. Опция -P указывает на использование физической структуры каталогов вместо следующих символических ссылок (см. Также параметр -P для установленной встроенной команды); Параметр -L заставляет следовать символическим ссылкам. Аргумент - эквивалентен $ OLDPWD. Если используется непустое имя каталога из CDPATH или если - первый аргумент, и смена каталога прошла успешно, абсолютный путь нового рабочего каталога записывается в стандартный вывод. Возвращаемое значение истинно, если каталог был успешно изменен; false в противном случае.

cd [-L | -P] [dir]

Какой пакет является командой 'cd' в?

18
ответ дан 23 May 2018 в 12:55
  • 1
    Добавляя к этому, в то время как многие встроенные инструменты могут быть внешними командами, нет никакой возможности, чтобы команда cd могла быть реализована как внешняя команда, так как подпроцесс невозможно изменить рабочий каталог его родительского процесса. – Carpetsmoker 11 March 2016 в 22:35
  • 2
    +1 для ссылки на пакет, из которого можно легко получить исходный код. – Mathieu K. 12 March 2016 в 13:56

Фактический исходный код cd для

Bash в builtins/cd.def в конце файла TCSH в sh.dir.c как функция dochngd PDKSH (общедоступный домен Korn shell, найденный в некоторые BSD) в c_ksh.c в верхней части файла Korn 93 (исходная оболочка Korn, старая версия) в src/cmd/ksh93/bltins/cd_pwd.c

Sys-call chdir для

Bash в builtins/cd.def в конце файла Bash - это где ссылка в начале этого пункта указывает на TCSH в sh.dir.c как функцию [ f4]

Можно заметить, что sys-вызовы все еще не являются концом цепочки, которая будет находиться на уровне отдельной файловой системы.

5
ответ дан 23 May 2018 в 12:55

Правильно, так как все написаны, cd встроен в любую используемую вами оболочку, потому что процесс не может повлиять на рабочий каталог его родителя. cd содержит несколько колоколов и свистов (я имею в виду pushd и друзей, cd без аргументов и т. д.), но если вы берете на себя труд, чтобы вырыть источник, вы будете недовольны: основной Дело в том, что cd вызывает системный вызов chdir(2).

Не так много, потому что, в отличие от, скажем, переменной среды, подобной HOME, «рабочий каталог» является системным примитивом: один из атрибутов, который имеет каждый процесс, например (реальный) идентификатор пользователя или приоритет планирования. Это начальная точка при открытии файлов с относительными путями.

3
ответ дан 23 May 2018 в 12:55

Другие вопросы по тегам:

Похожие вопросы: