Я возился с переменными окружения на моем Mac, пытаясь научиться их использовать, и я использовал команду, в nano ~/.bash_profile
которой затем добавил строку, HOME=/Users/MyCompName/Desktop
чтобы обновить мою домашнюю переменную.
Это изменение сработало, и его можно увидеть, когда я использую printenv
для просмотра всех переменных среды, но когда я вернулся, чтобы измениться, HOME
я больше не смог найти ~/.bash_profile
. Куда это делось?
~
означает$HOME
$HOME
,~
его тоже переопределятОтветы:
Это в том же месте.
Прежде чем изменение
~
расширится до чего-то вроде/Users/YourUserName
, оболочка найдет вас.bash_profile
там. После того как файл получен, он~
расширяется по другому пути, поэтому~/.bash_profile
больше не указывает на соответствующий файл. Это потому что в данном контексте~
значит$HOME
.Если вы знаете полный путь к вашему домашнему каталогу, вы можете использовать его вместо
~
. В Mac это будет выглядеть примерно так:Или пусть ваш Bash ищет ваш домашний каталог в базе данных пользователей, а не просто просматривает
$HOME
. Это не требует от вас ничего запоминать:Изменение вашей
HOME
переменной без изменения фактического домашнего каталога - не лучшая идея. Изменение домашнего каталога любого пользователя является административной задачей, обычно обычные пользователи не могут этого сделать.источник
.bash_profile
имеет форму сценария Bash. Вы можете запустить скрипт или получить его. Запуск означает создание подоболочки и выполнение сценария построчно. Sourcing означает выполнение сценария в текущей оболочке. Некоторые задачи, которые должны повлиять на текущую оболочку, не могут быть выполнены в подоболочке; изменение переменной для текущей оболочки является одним из них. Вот почему некоторые файлы поставляются, а не выполняются в подоболочке. Для ручного источника файла используйте. file
(.
определяется POSIX) илиsource file
(source
это расширение не POSIX, понимаемое несколькими оболочками).nano ~YourUserName/.bash_profile
вместо этого. Это будет искать ваш домашний каталог в пользовательской базе данных, а не просто смотреть на $ HOME.