tmux – при разделении меняет симлинкованный путь на несимлинкованный путь.

Вопрос или проблема

У меня есть следующая привязка, которая позволяет мне сделать вертикальное разделение в tmux

bind v split-window -h -c "#{pane_current_path}"

Это позволяет мне открыть новое разделение, и оно по умолчанию находится в той же папке, где и последний активный панель, что я считаю удобным.

Проблема в том, что когда я нахожусь в символической ссылке или на Mac, где она разрешается на корне с помощью synthetic.conf, я обнаруживаю, что она разворачивает отображаемый путь обратно к его оригиналу, который длинный, и мне это не нравится 😀

Есть ли способ изменить приведенную выше команду так, чтобы она принимала именно тот путь, в котором я нахожусь, и использовала его?

Например, если мой путь был

# maps to ~/Dropbox
/db 

Он останется в /db в новом окне

Ответ или решение

Использование tmux для управления терминальными сессиями является популярным выбором среди специалистов в области информационных технологий благодаря его гибкости и возможностям мультиплексирования. Однако при работе с символическими ссылками (symlinks), особенно в случаях, специфичных для операционных систем, таких как macOS, могут возникать особые вопросы, как в вашем случае, когда при разделении окна изменяется символический путь на оригинальный.

Теория

Проблема с символическими ссылками в tmux: Главная проблема заключается в том, что tmux автоматически разворачивает символические пути до их исходного местоположения. Это связано с тем, как tmux воспринимает текущий путь #{pane_current_path}. Когда вы выполняете привязку, которая открывает новое окно или сплит в текущем каталоге, tmux может игнорировать символические ссылки и использовать фактический путь.

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

macOS и synthetic.conf: В MacOS существует особенность для управления виртуальными файловыми системами с использованием файла synthetic.conf, который позволяет создавать символические ссылки и точки монтирования на уровне системы. Этот метод также может влиять на разрешение путей, вызывая аналогичные проблемы с развертыванием путей.

Пример

Рассмотрим ваш сценарий: у вас есть путь, например, /db, который является символической ссылкой на ~/Dropbox. При выполнении команды split-window -h -c "#{pane_current_path}", tmux разворачивает /db в ~/Dropbox, что приводит к открытию новой панели в каталоге ~/Dropbox.

Применение

Для решения данной проблемы можно использовать несколько подходов:

  1. Скриптирование с использованием оболочки sh/bash:
    Использование оболочечного скрипта для хранения и восстановления символического пути может быть эффективным решением. Пример скрипта может выглядеть следующим образом:

    bind v split-window -h -c "$(readlink -f "#{pane_current_path}" || echo "#{pane_current_path}")"

    Здесь readlink -f пытается определить ссылочный путь к каталогу, но при этом возвращает исходный путь, если что-то пойдет не так. Вместо readlink -f на macOS может потребоваться использовать greadlink, установить который можно через Homebrew с использованием coreutils.

  2. Использование chdir и JSON API:
    Вы можете использовать команду chdir вместе с более продвинутыми методами использования API tmux, чтобы убедиться, что путь сохраняется в неизменной форме. Вызов методов API может быть полезным в процессе автоматизации, например, хранение исходного пути в временном файле или переменной среды и возврат к нему по необходимости.

  3. Обходные пути с использованием tmux-плагинов:
    Существуют плагины для tmux, которые предоставляют расширенные возможности для управления сессиями. Такие плагины могут быть настроены таким образом, чтобы обрабатывать символические ссылки без их разворачивания.

  4. Использование других утилит для управления путями:
    Также можно использовать другие утилиты командной строки, которые позволяют управлять символическими ссылками и путями, например, realpath или dircolors, в комплексных сценариях автоматизации вашего рабочего процесса.

Каждое из предложенных решений требует определенных манипуляций и понимания терминальных команд, но позволяет сохранить работу в символическом пространстве файловой системы без разрыва ссылки на исходный путь. Выбор нужного решения зависит от ваших предпочтений и уровня комфорта с изменением конфигураций. Это важно помнить, поскольку тестирование изменений должно проводиться в безопасной среде, чтобы предотвратить возникновение дополнительных проблем.

В итоге, примите во внимание, что tmux и использование символических ссылок обладают высокими уровнями кастомизации и могут быть адаптированы ко всем вашим требованиям при наличии должного понимания рабочих процессов и системных особенностей.

Оцените материал
Добавить комментарий

Капча загружается...