Который является лучшей практикой при замене системного двоичного файла?

Правильное объяснение было уже дано jsbillings и geekosaur, но позволило мне подробно остановиться на этом немного.

В большинстве оболочек, включая удар, каждая сторона конвейера работает в подоболочке, таким образом, любое изменение во внутреннем состоянии оболочки (таком как установка переменных) остается ограниченным тем сегментом конвейера. Единственная информация, которую можно получить от подоболочки, - то, что она производит (к стандартному выводу и другим дескрипторам файлов) и его код выхода (который является числом между 0 и 255). Например, следующий отрывок печатает 0:

a=0; a=1 | a=2; echo $a

В ksh (варианты, полученные на основании кода AT&T, не pdksh/mksh варианты) и zsh, последний объект в конвейере выполняется в родительской оболочке. (POSIX позволяет оба поведения.), Таким образом, отрывок выше печатает 2.

Полезная идиома должна включать продолжение цикла с условием продолжения (или независимо от того, что Вы имеете на правой стороне конвейера, но некоторое время цикл на самом деле распространен здесь) в конвейере:

cat junk | {
  while read var ; do x=55 ; done
  echo x=$x 
}

6
18.04.2011, 21:38
2 ответа

Замена системного двоичного файла должна быть последним средством.

Мой совет к:

  • Поместить /usr/local/bin перед /usr/bin и другие системные каталоги на PATH.
  • Сделать /usr/local/bin/ant символьная ссылка на /usr/local/apache-ant-1.8.2/bin/ant.
  • Не включать /usr/local/apache-ant-1.8.2/bin в PATH вообще.

Сюда:

  • Ваши настройки (в /usr/local/bin) переопределите системные значения по умолчанию.
  • Символьная ссылка /usr/local/bin/ant напоминает Вам, где Вы получили ту версию ant.
  • Если Вы хотите протестировать что-то с установкой по умолчанию, просто удалите /usr/local/bin от Вашего PATH на время теста.
5
27.01.2020, 20:25

Обычный метод переопределяющих системных двоичных файлов должен установить новые двоичные файлы в /usr/local/bin (или sbin) и затем удостоверяясь это /usr/local/bin прибывает прежде /usr/bin в Вашем пути.

Обычно, Вы делаете это путем конфигурирования пакетов с --prefix=/usr/local, который заставляет их устанавливать свои двоичные файлы под /usr/local/bin, вместо того, чтобы делать каталог в /usr/local для каждого пакета.

Вы говорите, что существуют двоичные файлы в /usr/local/apache-ant-1.8.2/bin то, что Вы не хотите использовать? В этом случае я рекомендовал бы установить его под /usr/local/apache-ant-1.8.2 (как Вы делаете теперь), но затем делаете символьную ссылку в /usr/local/bin кому: ../apache-ant-1.8.2/bin/ant (вместо помещения /usr/local/apache-ant-1.8.2/bin в Вашем пути).

4
27.01.2020, 20:25

Теги

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