Объединение массива в $PATH в bash на OSX

Попытка настроить переменную env $PATH в OSX со следующим в .profile:

PATH=(
    $HOME/bin
    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin/
    /sbin
)

PATH=$(IFS=:; echo "${PATH[*]}")
export PATH

Когда это загружено, я проверил путь, выполнив echo $PATH, и вывод выглядит правильно:

echo $PATH
/Users/apple/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Тем не менее, похоже, что ни один из вышеперечисленных путей не работает.

ls
- bash: (something like not able to find command ls, which is in /usr/bin)

Что мне здесь не хватает?


person bohanl    schedule 02.09.2013    source источник
comment
Функции, не относящиеся к POSIX, такие как массивы, не должны использоваться в .profile, который является файлом конфигурации для оболочки POSIX.   -  person chepner    schedule 03.09.2013


Ответы (1)


Измените имя переменной массива PATH на другое, например:

P=(
    $HOME/bin
    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin/
    /sbin
)

PATH=$(IFS=:; echo "${P[*]}")
export PATH

Я не уверен, почему, хотя. Если я это выясню, я обновлю этот ответ.

Обновление: дополнительную информацию об этом см. в разделе эту тему.

person kamituel    schedule 02.09.2013
comment
Это сработало. Спасибо! Может быть, что-то связано с тем, как bash переопределяет переменные? - person bohanl; 02.09.2013
comment
Второе присвоение PATH не изменяет PATH из массива в обычную переменную; это эквивалентно PATH[0]=$(IFS=:; echo "${PATH[*]}").. Затем вы пытаетесь экспортировать массив, что вряд ли сработает должным образом. - person chepner; 03.09.2013
comment
@chepner - declare -p PATH после того, как задание напечатает declare -x PATH="...", так что это не массив (вопрос был о bash OSX). - person kamituel; 03.09.2013