Почему оболочка Shell не может запускаться заглавными буквами, но могут быть использованы другие команды?

Почему это?

Когда я это делаю

CD ~/Desktop

Это не ведет меня на Рабочий стол. Но это:

echo "foo
bar" | GREP bar

дает мне:

bar
33 голоса | спросил DisplayName 28 +03002014-10-28T23:23:29+03:00312014bEurope/MoscowTue, 28 Oct 2014 23:23:29 +0300 2014, 23:23:29

1 ответ


71

Из ваших других вопросов, я полагаю, вы используете OS X. По умолчанию файловая система HFS + в OS X не учитывает регистр: вы не можете иметь два файла с именем «abc» и «ABC» в том же каталоге, и пытаясь получить доступ к любому имени, он попадет в тот же файл. То же самое может произойти и под Cygwin, или с файловыми системами без учета регистра (например, FAT32 или ciopfs ) в любом месте.

Потому что grep является реальным исполняемым файлом, он искал файловую систему (в каталогах PATH). Когда ваша оболочка выглядит в /usr/bin для grep или GREP он найдет grep исполняемый файл.

Встроенные оболочки оболочки not ищут файловую систему: поскольку они встроены, к ним обращаются через (строчные) сравнения строк внутри самой оболочки.

То, с чем вы сталкиваетесь, - интересный случай. В то время как cd является встроенным, доступным с учетом регистра, CD находится в качестве исполняемого кода /usr/bin/cd. Исполнение cd довольно бесполезно: потому что cd влияет на текущую среду выполнения оболочки, она всегда предоставляется как обычная оболочка встроенный , но существует cd исполняемый для POSIX в любом случае, который меняет каталог сам по себе, а затем сразу же завершает работу, оставляя окружающую оболочку там, где она начиналась.

Вы можете попробовать их с помощью type встроенный :

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD

type сообщает вам, что будет делать оболочка при запуске этой команды. Когда вы запускаете cd, вы получаете доступ к встроенному, но CD находит исполняемый файл. Для других встроенных функций встроенный и исполняемый файлы будут достаточно совместимы (попробуйте echo), но для cd, что невозможно.

ответил Michael Homer 28 +03002014-10-28T23:37:42+03:00312014bEurope/MoscowTue, 28 Oct 2014 23:37:42 +0300 2014, 23:37:42

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132