Правильное объяснение было уже дано 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
}
Замена системного двоичного файла должна быть последним средством.
Мой совет к:
/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
на время теста.Обычный метод переопределяющих системных двоичных файлов должен установить новые двоичные файлы в /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
в Вашем пути).