2017-02-09 12 views
2

Если создать символьную ссылку черезОдда поведения PWD с симлинками в терминальных вкладках

ln -s /path/to/linked/dir current/path/link_name 

и измените каталог на current/path/link_name через

cd link_name 

то я могу проверить, где я использую PWD-команду , Выход будет

current/path/link_name 

Но если я использую некоторый эмулятор терминала, например, терминатор, Konsole или другие, я могу разделить вкладку или создать новую вкладку в том же каталоге. Выход PWD-команды на вкладке вновь созданной будет

/path/to/linked/dir 

Во многих случаях это не удобно. Кто-нибудь знает, как изменить это поведение в некоторых эмуляторах терминалов?

P.S. Я также заметил, что выход ls, напечатанный от /current/path/link_name, совпадает с выходом ls, напечатанным с /path/to/linked/dir.

ответ

0

Терминатор 1.90 делает то, что вы хотите. В примерном сессии:

$ cd -- "$(mktemp --directory)" 
$ mkdir a 
$ ln -s a b 
$ cd b 

Нажмите Ctrl - Сдвиг - е (или о или т). На данный момент я все еще в b.

+0

как упоминается l0b0, разделение по вертикали и по горизонтали сохраняет рабочий каталог, но новая вкладка переходит в исходный каталог в терминаторе –

+0

. Новая вкладка имеет то же самое, что и разделение здесь. Вот почему я упомянул «Ctrl-Shift-t». – l0b0

+0

Не работает для меня вообще. Какую ОС вы используете? –

1

Вы не можете. Причина в том, что вы теряете информацию о том, как вы попали туда после выполнения системного вызова. Некоторые эмуляторы терминала и в основном оболочка bash(1) пытаются запомнить это и реализовать pwd как внутреннюю команду, чтобы справиться с этими сценариями. Но в общем, если вы пытаетесь

/bin/pwd 

Вы обнаружите, что вся информация о том, как вы попали в этот последний каталог был потерян в течение времени.

Спросите себя, как может /bin/pwd работа и как она может определить каталог Вы, и Вы будете отвечать себе на вопрос:

Система поддерживает текущий каталог (команда pwd наследует это от его родительскую оболочку) в системных данных для каждого процесса, но для сохранения ресурсов он хранит только индекс inode каталога, который фактически является вашим текущим каталогом (на самом деле он не поддерживает ссылку на внутреннюю структуру inode). Он не сохраняет путь, который вы использовали для его поиска, и сохраняет эту информацию только для того, чтобы получить начальную точку, когда вы запрашиваете относительный путь при открытии файла. Проблема такая же, как определение того, к какому каталогу принадлежит несколько связанных файлов ... родительский каталог не хранится для файла, так как он может быть в нескольких каталогах, связанных с ним все в то же время ...это также верно для каталогов, но у них есть запись .. внутри себя, которая ссылается на своих родителей (их истинных родителей, так как один каталог теперь может принадлежать к различным каталогам средствами на обычных ссылках, это запрещено системой, и обеспечивается системным вызовом mkdir(2)). Команды pwd(1) используют именно эти ссылки для поиска родительского каталога (а затем найдите текущий каталог в родительском каталоге, выполнив поиск номера inode текущего каталога на нем), пока этот алгоритм не приведет к тому же inode (корневой каталог имеет эту специальную характеристику, его .. точек входа снова к себе), поэтому он перестает расти. pwd может работать только потому, что следующие каталоги, и никогда файлы.

 Смежные вопросы

  • Нет связанных вопросов^_^