LINUX.ORG.RU

[zsh] именованные директории

 


0

0

Как в zsh-скрипте выполнить подстановку в пути именованной директории (в частности, $HOME -> ~) в произвольной переменной?

Нашел только как вывести сокращенную запись текущей директории:
% print -P ~%
или
% echo ${(%):-%~}

Кстати, вторая запись вообще меня из себя выводит, я так и не смог понять, как она работает, и где в man zshall искать о ней инфу :(

Еще раз в двух словах проблема: есть в некой переменной абсолютный путь. Нужно свернуть его выполнив подстановку подходящей именованной директории.

Например

$ myvar=/home/username/some/dir
$ myvar=$(mystic_substitute myvar)
$ echo $myvar
~/some/dir

Ответ на: комментарий от anonymous4

Перебрать в цикле все переменные, которые нужно подставить :)

nnz ★★★★
()
Ответ на: комментарий от anonymous4

а какие ещё именованные директории, кроме ~, ты знаешь? вот и перебери их в цикле, в чём проблема-то?

Приведи пример, в котором тебе в пути нужно заменить не /home/username на ~, а что-то другое. Я таких примеров придумать не могу.

gorilych ★★
()
Ответ на: комментарий от gorilych

>а какие ещё именованные директории, кроме ~, ты знаешь?

zsh поддерживает именованные директории. Не обязательно это должны быть папки пользователей. Создаются они с помощью команды hash с ключом -d:

[/]% mkdir -p /tmp/some/dir
[/]% cd /tmp/some/dir
[/tmp/some/dir]% hash -d foo=`pwd`
[~foo]% cd /
[/]% cd ~foo
[~foo]% pwd
/tmp/some/dir

Мы тут создали именованную директорию ~foo, которая ссылается на /tmp/some/dir

См. FILENAME EXPANSION в man zshexpn

anonymous4
() автор топика
Ответ на: комментарий от gorilych

> вот и перебери их в цикле, в чём проблема-то?

Похоже, так и прийдется сделать. Я думал, есть какое-то уже готовое средство для этого в zsh.

Можно, кстати, сделать ацкий вариант с cd, но он мне еще меньше нравится.

anonymous4
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.