В каком пакете находится команда 'cd'? [дубликат]

Я хочу посмотреть исходный код команды cd, но cd не имеет собственного пакета, так в каком пакете он находится?

22
задан 11 March 2016 в 19:45

5 ответов

Узнайте то, что вводит команду, использует type команда.

$ type cd
cd is a shell builtin
$ type ls
ls is aliased to `ls --color=auto'
$ type cat
cat is /bin/cat

Вы видите, cd встроенная оболочка.

Это означает, это - часть Вашей оболочки, которая является Bash по умолчанию. Это - конечно, также пакет программного обеспечения, в котором это содержится.

Для установленных команд, которые не являются оболочкой builtins, но исполняемыми файлами, использовать dpkg -S узнать пакет:

$ dpkg -S $(which cat)
coreutils: /bin/cat

Для получения справки для созданного в командах используйте help команда (который также встроен):

$ help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
    Change the shell working directory.

[... output shortened ...]
55
ответ дан 23 November 2019 в 01:30

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

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

chdir () функция должна заставить каталог, названный путем, на который указывает параметр пути становиться текущим рабочим каталогом; то есть, начальная точка для пути ищет пути, не начинающиеся '/'.

25
ответ дан 23 November 2019 в 01:30

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

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

3
ответ дан 23 November 2019 в 01:30

Вот является страница справочника для CD, но этого не официальной с тех пор cd часть "Shell Встроенные Команды". Точно так же, как некоторые другие команды...

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 

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

CD [-L |-P] [dir]

Измените текущий каталог на dir. Переменная ДОМОЙ является dir по умолчанию. Переменный CDPATH определяет путь поиска для каталога, содержащего dir. Альтернативные имена каталогов в CDPATH разделяются двоеточием (:). Пустое имя каталога в CDPATH совпадает с текущим каталогом, т.е. ''. ''. Если dir начинается с наклонной черты (/), то CDPATH не используется.-P опция говорит для использования физической структуры каталогов вместо того, чтобы перейти по символьным ссылкам (см. также-P опцию к набору встроенная команда);-L опция вынуждает символьные ссылки сопровождаться. Аргумент - эквивалентен $OLDPWD. Если непустое имя каталога от CDPATH используется, или если - первый аргумент, и изменение каталога успешно, абсолютный путь нового рабочего каталога записан в стандартный вывод. Возвращаемое значение верно, если каталог был успешно изменен; ложь иначе.

В котором пакет является командой 'CD'?

Это было бы ударом

18
ответ дан 23 November 2019 в 01:30

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

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

Sys-вызов chdir для

  • Ядро Linux находится в fs/open.c
  • FreeBSD - то, где ссылка в начале этого объекта указывает на
  • другое OSs BSD-типа и весьма схожая работа OpenSolaris

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

5
ответ дан 23 November 2019 в 01:30

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

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