Не понимание меня имело Caps Lock на, я ввел CD
в командную строку на моем Mac. Удивительно, это не сделало ошибки.
which CD
показывает мне /usr/bin/CD
. И если я исследую тот файл, он похож на это:
#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
Я предполагаю, что это - что-то, чтобы сделать с переводом верхнего к нижнему регистру, но ${0##*/}
абсолютно непрозрачно мне. man CD
не говорит мне "ручной записи". Кто-то может объяснить эту команду?
Править: Хорошо, я просто заметил, что файловая система OSX нечувствительна к регистру, таким образом, этот файл на самом деле /usr/bin/cd
. Но если я ввожу cd
обычно, я, конечно, получаю встроенное, таким образом, /usr/bin/cd
только назван, когда я понимаю свой случай превратно. Я все еще хотел бы знать то, что это делает.
Кажется, что это не делает многого вообще:
"Я иду на некоторые старые памяти здесь, таким образом, я не могу дать очень подробное объяснение, но причина/usr/bin/cd существует происходит из-за требования POSIX, которое касается псевдонимов и способности не использовать псевдоним через выход. Но/usr/bin/cd является бесполезным сценарием с тех пор при выполнении CD в рамках сценария оболочки, изменение каталога только относится к подоболочке, под которой работает сценарий. CD не может быть сценарием оболочки.
Кроме того, сценарий является универсальным сценарием, в котором он используется для многих команд и не просто CD.
Я заметил это
/usr/bin/cd
имеет количество жесткой ссылки 15 в моих 10,4 системах [...]"
Далее вниз в том потоке:
"Мой друг сказал мне, что "$ {0##*/}" означает, "принимают управление, но удаляют его путь" (т.е. преобразуйте "/usr/bin/cd" в "CD")".
Таким образом, кажется, что сценарий удаляет путь, преобразовывает результат в нижний регистр и затем добавляет исходные аргументы.