Intereting Posts
Почему список apt-cache также содержит пакеты, которые НЕ установлены? Как переключиться с неизвестной оболочки на bash? получение сообщения об ошибке при попытке зарегистрироваться для подписки на rhel6 Получить дату изменения, которую можно использовать с touch -m ssh "-f" не возвращает руку в bash при прослушивании stdout / stderr rsync с двоеточиями в именах файлов Как обращаться к любым файлам или сценариям, упакованным внутри RPM из% pre% post scriptlets Создание зашифрованного файлового контейнера в качестве пользователя без полномочий root Dnschef: не удается открыть файл журнала? Лучшие соглашения для значков в Debian / Ubuntu Копия Vimdiff выше / ниже используя else, если в псевдониме bash (домашнее задание) Как найти символическую ссылку, когда местоположение, в котором оно было создано, неизвестно? Как искать папку только с разрешением x (исполнение) Что означает «тест $ 2 &&» в этом сценарии bash?

Неоднозначно называемые исполняемые файлы

Похоже, что в tcsh если я неоднозначно назвал исполняемые файлы в двух отдельных папках в $PATH он направляется к тому, который находится в последней созданной папке. Я прав? И это всегда так?

В общем, это будет порядок, который он найден в $PATH так как это предполагаемое использование для $PATH .

Может быть исключение из этого правила, но для этого потребуется, чтобы команда была жестко закодирована с помощью каталога в программе. Я бы подумал, что это плохая практика.

У вас не может быть двух файлов с тем же именем в одном каталоге. Если существует несколько версий prog , у вас есть один пример в /usr/bin и другой в /usr/local/bin , а PATH среды PATH определяет, какой из них выбран. Это делается одним из семейств exec(3) который смотрит на PATH (скорее всего, execvp(3) ), оболочка не говорит здесь.

В Solaris обычно два каталога (на самом деле более двух), которые содержат разные версии одной и той же программы имен. Примером является ps который находится в /usr/ucb и /usr/bin . Если оба параметра /usr/ucb и /usr/bin отображаются в вашем PATH , версия ps которая выполняется, зависит от того, какой из них появляется в вашем PATH .

Все оболочки пересекают каталоги в $PATH по порядку и выполняют первую команду, которую они находят. Например, если ваш путь: /usr/local/bin:/usr/bin:/bin , тогда команда из /usr/local/bin выполняется, если она есть; если нет, выполняется команда из /usr/bin и т. д. Не имеет значения, в каком порядке были установлены команды.

Есть одно исключение: если вы устанавливаете программу, когда оболочка уже запущена, оболочка, возможно, сохранила местоположение программы в кеше, и в этом случае она будет продолжать выполнять старую программу. Например, если вы запустите tcsh, вы запустите foo который находится в этой точке /usr/bin/foo , затем вы установите другую версию программы в /usr/local/bin/foo и снова вызовите foo из этой оболочки, это все равно будет работать /usr/bin/foo . Запустившаяся оболочка будет забирать /usr/local/bin/foo . Запустите команду rehash чтобы очистить кеш tcsh от расположения команд. В bash и zsh эквивалентная команда hash -r (zsh также понимает rehash ).