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

2820
Matt

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

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

15
В основном `~` означает `$ HOME` el.pescado 5 лет назад 9
... так что если вы переопределите `$ HOME`,` ~ `тоже будет переопределено el.pescado 5 лет назад 6

1 ответ на вопрос

32
Kamil Maciorowski

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

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

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

nano /Users/YourUserName/.bash_profile 

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

nano ~YourUserName/.bash_profile 

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

Круто, я смог найти его снова, спасибо! Не могли бы вы уточнить, что вы подразумеваете под «после того, как файл получен»? Я не знаю, что это значит для файла, чтобы получить Matt 5 лет назад 0
@Matt `.bash_profile` имеет форму скрипта Bash. Вы можете запустить скрипт или получить его. Запуск означает создание подоболочки и выполнение сценария построчно. Sourcing означает выполнение скрипта в * current * оболочке. Некоторые задачи, которые должны повлиять на текущую оболочку, не могут быть выполнены в подоболочке; изменение переменной для текущей оболочки является одним из них. Вот почему некоторые файлы поставляются, а не выполняются в подоболочке. Чтобы вручную найти файл, используйте `. file` (`.` определяется POSIX) или` source file` (`source` - это расширение не POSIX, которое понимается несколькими оболочками). Kamil Maciorowski 5 лет назад 6
@Matt Посмотрите на это: [В чем разница между выполнением сценария Bash и его поиском?] (Https://superuser.com/q/176783/432690) Kamil Maciorowski 5 лет назад 4
Если вы (Мэтт) не знаете, где находился ваш домашний каталог, вы можете вместо этого использовать `nano ~ YourUserName / .bash_profile`. Это будет искать ваш домашний каталог в пользовательской базе данных, а не просто смотреть на $ HOME. Stig Hemmer 5 лет назад 2
@StigHemmer Ответ теперь вики сообщества. Ваш полезный комментарий был усвоен. Спасибо. Kamil Maciorowski 5 лет назад 1

Похожие вопросы