Я изменил свою переменную «HOME» и теперь не могу найти «~ / .bash_profile», чтобы изменить ее обратно

15

Я возился с переменными окружения на моем Mac, пытаясь научиться их использовать, и я использовал команду, в nano ~/.bash_profileкоторой затем добавил строку, HOME=/Users/MyCompName/Desktopчтобы обновить мою домашнюю переменную.

Это изменение сработало, и его можно увидеть, когда я использую printenvдля просмотра всех переменных среды, но когда я вернулся, чтобы измениться, HOMEя больше не смог найти ~/.bash_profile. Куда это делось?

Matt
источник
9
В основном ~означает$HOME
el.pescado
6
... так что если вы переопределите $HOME, ~его тоже переопределят
el.pescado

Ответы:

32

Это в том же месте.

Прежде чем изменение ~расширится до чего-то вроде /Users/YourUserName, оболочка найдет вас .bash_profileтам. После того как файл получен, он ~расширяется по другому пути, поэтому ~/.bash_profileбольше не указывает на соответствующий файл. Это потому что в данном контексте ~значит $HOME.

Если вы знаете полный путь к вашему домашнему каталогу, вы можете использовать его вместо ~. В Mac это будет выглядеть примерно так:

nano /Users/YourUserName/.bash_profile

Или пусть ваш Bash ищет ваш домашний каталог в базе данных пользователей, а не просто просматривает $HOME. Это не требует от вас ничего запоминать:

nano ~YourUserName/.bash_profile

Изменение вашей HOMEпеременной без изменения фактического домашнего каталога - не лучшая идея. Изменение домашнего каталога любого пользователя является административной задачей, обычно обычные пользователи не могут этого сделать.

оборота Камиль Мачоровский
источник
Круто, я смог найти его снова, спасибо! Не могли бы вы уточнить, что вы подразумеваете под «после того, как файл получен»? Я не знаю, что это значит для файла, который получен
Мэтт
6
@Matt .bash_profileимеет форму сценария Bash. Вы можете запустить скрипт или получить его. Запуск означает создание подоболочки и выполнение сценария построчно. Sourcing означает выполнение сценария в текущей оболочке. Некоторые задачи, которые должны повлиять на текущую оболочку, не могут быть выполнены в подоболочке; изменение переменной для текущей оболочки является одним из них. Вот почему некоторые файлы поставляются, а не выполняются в подоболочке. Для ручного источника файла используйте . file( .определяется POSIX) или source file( sourceэто расширение не POSIX, понимаемое несколькими оболочками).
Камиль Мачоровский
4
@ Matt Посмотрите на это: в чем разница между выполнением сценария Bash и его поиском?
Камиль Мачоровский
2
Если вы (Мэтт) не знаете, где был ваш домашний каталог, вы можете использовать nano ~YourUserName/.bash_profileвместо этого. Это будет искать ваш домашний каталог в пользовательской базе данных, а не просто смотреть на $ HOME.
Стиг Хеммер
1
@StigHemmer Ответ теперь вики сообщества. Ваш полезный комментарий был усвоен. Спасибо.
Камиль Мачоровский