Intereting Posts
Драйвер сенсорного экрана как приостановить другие не связанные процессы, чтобы позволить процессам, заинтересованным в занятии ЦП? 2 монитора на графическом процессоре, 1 монитор интегрированной графики манипуляция awk Можно ли запускать несколько PHP-сайтов с помощью 1 машины? Как определить процесс, который не имеет pid? Как запустить браузер браузера с помощью службы системы? изменение разделов слова zsh grep + поиск рекурсивного сложного синтаксиса в папке в файлах / скриптах Когда сценарий работает в фоновом режиме в AIX, он создает копию в каталоге / tmp во время выполнения bg, как изменить это поведение? Как подготовить безголовую машину? Как заставить клавиатуру Bluetooth распознаваться перед входом в систему? Пересылка Postfix почты на основе regexp Правила брандмауэра IPv6, похоже, препятствуют всем подключениям Как скопировать папку с помощью команды установки

~ $ HOME, но иногда?

Это своего рода тривиальный и немой вопрос.

cd ~ 

делает то же самое, что и

 cd $HOME 

который также совпадает с

 cd /home/tandu 

Однако,

 cd ~not-tandu 

изменения /home/not-tandu

Это чисто синтаксический выбор? Как это обрабатывается ядром (или cd execuable?) Есть ли специальный случай для ~ для добавления косой черты, если все остальное опущено? То есть ~/ и ~ изменяются в один и тот же каталог, но ~a – это один каталог вверх. То же самое нельзя сказать о любом другом каталоге, в который вы вносили изменения.

~ – это псевдоним для $HOME предоставляемый рядом оболочек, но $HOME более универсален. $HOME самом деле просит оболочку вставлять (заменять) переменную окружения HOME здесь. Существует множество различных переменных окружения, которые можно заменить, попробуйте запустить env для списка. Обратите внимание: ~ не всегда распознается, когда она не находится в начале слова. Попробуйте эти две команды для сравнения:

 ls /~ ls /$HOME 

Первый передается исполняемому файлу ls как /~ который затем пытается посмотреть на файл с именем ~ в корневом каталоге, второй расширяет $HOME и становится //home/user который затем передается в исполняемый файл ls в виде команды, линейный аргумент. Все POSIX-системы (POSIX – это стандарт для работы систем UNIX и Linux) позволяют обрабатывать несколько косых черт так же, как один косой чертой, поэтому //home/user совпадает с именем /home/user . ~username – это ярлык для указания оболочке искать имя пользователя в файле passwd и возвращать домашний каталог. Нет эквивалентной переменной окружения. Все эти подстановки выполняются оболочкой и поддерживаются большинством из них, но все переменные среды, такие как $HOME , гарантируются всеми оболочками. Кроме того, cd на самом деле является встроенной командой. Это специальная директива, которая сообщает самой оболочке об изменении каталогов. Это не похоже на другие встроенные оболочки, которые могут быть реализованы как отдельный исполняемый файл, например echo , потому что он используется для изменения фундаментального атрибута процесса оболочки. echo – это просто встроенная оболочка по соображениям производительности, но в старые добрые времена UNIX была доступна только в виде собственного исполняемого файла /bin/echo .

~foo означает «домашний каталог пользователя foo».

Это не выполняется ядром, оно интерпретируется оболочкой. Всякий раз, когда оболочка видит ~foo в качестве аргумента, он прозрачно заменяет его домашним каталогом пользователя foo и передает его на свое место. Поэтому, когда вы запускаете cd ~tandu , оболочка фактически запускает cd /home/tandu .

~ а затем имя пользователя расширяется до домашнего каталога этого пользователя.