открыть файл, используя CDPATH и символическую ссылку

Чтобы быстро перемещаться, я добавил путь к CDPATH, который содержит символические ссылки в разных местах. Я сделал это, добавив следующую строку в .bashrc:

export CDPATH=~/symlinks 

При работе с каталогами все в порядке, и я могу получить доступ к символическим папкам со всего мира.

Например, если я это сделаю:

 $ ln -s ~/path/to/folder ~/symlinks/folder 

Тогда я могу просто написать:

 $ cd folder 

чтобы войти в символическую папку, независимо от моего текущего каталога.

Тем не менее, когда я создаю символическую ссылку на файл, а затем пытаюсь открыть ее с помощью редактора, я получаю пустой файл, если я не в директории symlink.

Например, если я это сделаю:

 $ ln -s ~/path/to/file/filename ~/symlinks/filename 

а затем напишите:

 $ kwrite filename 

Я получаю пустой файл, если я не в папке symlink.

Я хочу получить доступ к файлу из любого места, хотя, как я могу это достичь?

  • sudoing при входе в систему как root
  • Как распечатать символ ASCII с помощью разных кодовых точек в Bash?
  • Пользователь Admin не показывает путь к папке в консольной строке, только $
  • Невозможно сохранить значение ascii в переменной
  • Добавление пользователя «ubuntu» к экземпляру Vagrant ubuntu
  • Использование \ $ в конце имени переменной передается grep
  • Linux-скрипт или программа для сокращения имен файлов
  • Почему мой сценарий оболочки задыхается от пробелов или других специальных символов?
  • 2 Solutions collect form web for “открыть файл, используя CDPATH и символическую ссылку”

    Простой ответ заключается в том, что вы не можете.

    Что делает CDPATH, так это то, что если вы наберете «папку cd», сначала проверьте, существует ли «папка» в вашем CDPATH; если нет, он будет проверять папку, в которой вы сейчас находитесь. Но это характерно для изменений каталога; kwrite не проверяет CDPATH и AFAIK, нет возможности настройки, чтобы он выглядел в любом конкретном каталоге.

    Вы можете сделать небольшой скрипт оболочки, который заменяет kwrite, например:

     #!/bin/sh FILE=$1 if [ -f "$HOME/symlinks/$FILE" ] then kwrite "HOME/symlinks/$FILE" else kwrite "$FILE" fi 

    Затем запустите сценарий (который вы можете назвать, например, «akwrite») вместо прямого запуска kwrite.

    Вы не можете.

    Что вы можете сделать, так это определить ярлыки как переменные оболочки.

     fn=~/path/to/file/filename kwrite $fn 

    В zsh вы можете избежать столкновений имен с переменными оболочки вместо использования хешей каталогов. Это псевдонимы для имен файлов, которые расширяются после ~ (например, имен пользователей). Несмотря на их имена, эти псевдонимы не должны указывать на каталог, они могут быть расширены до произвольного текста.

     hash -d fn=~/path/to/file/filename kwrite ~fn 
    Linux и Unix - лучшая ОС в мире.