Как исправить Терминал, не загружающий ~ / .bashrc на OS X Lion [закрыто]

176

Всякий раз, когда я открываю новую вкладку в Терминале с помощью Cmd+ T, она открывает bash в том же каталоге, что и предыдущая вкладка. Это нормально работает, когда я в ~каталоге, но если я где-нибудь еще, я получаю ошибку при загрузке.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Похоже, .bashrcзагружается через относительный, а не абсолютный путь, потому что, если я делаю source ~/.bashrc, все работает гладко.

загружен bashrc

Я думаю, что это проблема, связанная с OS X Lion, потому что до обновления со Snow Leopard у меня не было такой же проблемы. Но это может быть вызвано тем, что терминал всегда открывается в ~, я не помню, пытался ли он открыть один и тот же каталог.

Однако вопрос остается тем же, как я могу сделать загрузку Терминала ~/.bashrcчерез абсолютный путь, а не относительный?

Якуб Арнольд
источник
1
этот вопрос следует перенести в apple.SE (если возможно?), а не закрывать.
Спарр
@Sparr Я полностью с тобой согласен, но модераторы переносят новые вопросы, а не старые. Смотрите обсуждение здесь
рюффп

Ответы:

357

Терминал открывает оболочку входа в систему. Это значит, ~/.bash_profileбудет казнен, а ~/.bashrcне.

Решение в большинстве систем состоит в том, чтобы «требовать» ~/.bashrcв ~/.bash_profile: просто поместите этот фрагмент в ваш ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
источник
8
Кто-нибудь может объяснить, что [[ -s /file/path ]]делает? Попытка поиска объяснения в Google не слишком проста.
Шейн
18
From man bash: -s file True, если файл существует и имеет размер больше нуля.
ckruse
1
«Терминал открывает оболочку входа» - каковы другие типы оболочек? Где я могу найти больше документации об этом?
dkight
4
Существуют так называемые «интерактивные оболочки» и «оболочки входа». Ваша инструкция по bash ( man bash) рассказывает об этом и объясняет это, глава INVOCATION (просто ищите INVOCATIONпосле вызова man bash, набрав /INVOCATION)
ckruse
3
Я не вижу, как вопрос, относящийся к ситуации выполнения кода, решаемой строкой кода, является «не по теме» сайта вопросов программирования.
Хельдар
26

Переименование .bashrcв .profile(или мягком связывании последнего к первому) следует также сделать трюк. Смотрите здесь .

scorpiodawg
источник
Или вы можете использовать символические ссылки: cd && ln -s ./.bashrc ./.profileобратите внимание, что символические ссылки чувствительны к пути к файлу, я считаю, что использование приведенного выше синтаксиса работает, но, чтобы быть уверенным, вы можете использовать абсолютные пути в любом случае.
Стив Беннер,
1
Нет? Эти файлы имеют разные цели. Если у вас есть синтаксис Bash, .profileвы нарушите регулярность sh.
tripleee
14

У меня есть следующее в моем ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

Если бы я имел .bashrcвместо ~/.bashrc, я бы увидел тот же симптом, который вы видите.

Кит Томпсон
источник