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

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

4 Solutions collect form web for “Неоднозначно называемые исполняемые файлы”

В общем, это будет порядок, который он найден в $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 ).

  • Изменение переменных группы и сохранения окружающей среды
  • Необходимо установить переменную с ""
  • Настройка команды promt в tcsh для отображения только 3-х рабочих каталогов вместо полного пути?
  • tcsh alias - найти порт FreeBSD
  • Как убить беглого кота?
  • Какую оболочку я должен использовать - tcsh vs bash?
  • Как заставить tcsh не вставлять пробелы в команду, которая охватывает несколько строк
  • ~ / .inputrc файл не работает правильно
  • Имеет ли tcsh эквивалент «$ {a: -b}» для назначения переменной по умолчанию, например Bash?
  • Синтаксис декларации оболочки оболочки Shell, () vs {}
  • awk + паста для очистки PATH?
  • Interesting Posts

    Как добавить репозитории yum по умолчанию для CentOS 7.3?

    Каким образом в Linux для пользователя без полномочий root запускается загрузка модуля ядра

    Как я могу восстановить файлы конфигурации «/ etc /» по умолчанию?

    Какой лучший и безопасный способ сохранить настройки приложения?

    Все еще жив, еще жив после убийства -9 / SIGKILL

    Почему моя копия командной строки не работает?

    Скрытие командных сообщений в сценарии командной оболочки

    Отключить функциональность CapsLock при коротком нажатии

    Типография Manpage и правильные тире

    Readline .inputrc сбрасывает значения по умолчанию с каждой строкой

    Вопрос о многоцелевом маршрутизации Centos 6.x

    Как работать с именами файлов, содержащими одну цитату внутри функции завершения zsh?

    Селективный рекурсивный ход?

    Сетевой интерфейс virtio останавливается после пробуждения

    Sublime Text 3 не отображает строку меню в Arch Linux, если она не запущена как root

    Linux и Unix - лучшая ОС в мире.