Да, в POSIX эта тема упоминается. Из здесь :
Среда подоболочки должна быть создана как дубликат среды оболочки , за исключением того, что ловушки сигналов, которые не игнорируются, должны быть установлены на действие по умолчанию. Изменения, внесенные в среду подоболочки , не должны влиять на среду оболочки. Подстановка команд, команды , сгруппированные в круглые скобки, и асинхронные списки должны выполняться в среде подоболочки. Кроме того, каждая команда в многокомандном конвейере находится в среде подоболочки; в качестве расширения, , однако, любая или все команды в конвейере могут выполняться в текущей среде . Все остальные команды должны выполняться в текущей среде оболочки .
Выбор поведения по умолчанию зависит от оболочки. В: только
echo 1 | read x
echo "$x"
zsh
и ksh
output 1
, другие современные Bourne-подобные оболочки выводят пустую строку.
При вводе swig
в командной строке оболочка будет искать эту команду в каталогах, перечисленных в переменной $PATH
. Он будет использовать сопоставление first, которое он найдет.
Поскольку swig
, который вы установили (скорее всего), находится в $HOME/local/swig/bin
и поскольку этот каталог либо отсутствует в вашем $PATH
, либо слишком поздно в нем, он подхватывает старую версию команды.
Поместите $HOME/local/swig/bin
в начале пути (сначала убедитесь, что это правильный каталог):
PATH="$HOME/local/swig/bin:$PATH"
См. также Как задать переменную пользовательской среды? (постоянно, а не сессионно)
Кроме того, можно запустить swig
с указанным путем:
$ ~/local/swig/bin/swig
Или, если вы находитесь в домашнем каталоге:
$ local/swig/bin/swig