Команда dirs

Команда dirs является встроенной командой командной оболочки bash, предоставляющей пользователям доступ к списку сохраненных директорий. Данный список формируется пользователем с помощью команд pushd и popd и может использоваться в рамках сценариев командной оболочки. Содержимое списка хранится до перезапуска командной оболочки и не кэшируется в рамках каких-либо файлов.

Базовый синтаксис команды выглядит следующим образом:

$ dirs [параметры]

Команда поддерживает ряд параметров, позволяющих как просто просматривать список директорий, так и получать пути к отдельным директориям или очищать этот список. В частности, параметр -c позволяет очистить список директорий, параметр -l позволяет вывести содержимое списка без привязки к домашней директории пользователя, параметр -p позволяет вывести список директорий по строкам, параметр -v позволяет вывести список директорий по строкам с нумерацией, а параметры +N и -N позволяет вывести путь к директории с номером N от начала и конца списка соответственно.

Примеры использования

Вывод списка сохраненных директорий

Для вывода списка сохраненных директорий достаточно использовать команду dirs без каких-либо параметров:

$ dirs
~

По умолчанию в списке директорий находится домашняя директория пользователя. Ее нельзя удалить из списка.

Для заполнения списка сохраненных директорий достаточно использовать команду pushd. По умолчанию при добавлении директории в список с помощью рассматриваемой команды происходит переход в данную директорию; для того, чтобы лишь модифицировать список без перемещения по директориям, будет использоваться параметр -n.

$ pushd -n /home/alex/code/
~ ~/code/
$ pushd -n /home/alex/wlan/
~ ~/wlan/ ~/code/
$ pushd -n /home/alex/openwrt/
~ ~/openwrt/ ~/wlan/ ~/code/
$ pushd -n /tmp
~ /tmp ~/openwrt/ ~/wlan/ ~/code/
$ dirs
~ /tmp ~/openwrt/ ~/wlan/ ~/code/

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

Для вывода списка сохраненных директорий по строкам следует использовать параметр -p.

$ dirs -p
~
/tmp
~/openwrt/
~/wlan/
~/code/

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

Для вывода списка сохраненных директорий с нумерацией следует использовать параметр -v.

$ dirs -v
0 ~
1 /tmp
2 ~/openwrt/
3 ~/wlan/
4 ~/code/

По сути, этот режим аналогичен предыдущему за исключением нумерации.

Для отказа от привязки к домашней директории пользователя (вывода абсолютных директорий) следует использовать параметр -l.

$ dirs -l
/home/alex /tmp /home/alex/openwrt/ /home/alex/wlan/ /home/alex/code/

Параметр -l может комбинироваться с параметрами -p и -v для форматирования вывода.

$ dirs -l -p
/home/alex
/tmp
/home/alex/openwrt/
/home/alex/wlan/
/home/alex/code/
$ dirs -l -v
0 /home/alex
1 /tmp
2 /home/alex/openwrt/
3 /home/alex/wlan/
4 /home/alex/code/

Очевидно, что в данном случае выводятся лишь абсолютные директории.

Получение путей к отдельным директориям

Для получения путей к отдельным директориям следует использовать параметры +N и -N. Как вы наверняка поняли, вместо N следует использовать номер пути от начала и конца списка соответственно.

$ dirs +0
~
$ dirs +1
/tmp
$ dirs +2
~/openwrt/
$ dirs +3
~/wlan/
$ dirs +4
~/code/
$ dirs +5
bash: dirs: 5: индекс стека каталогов за пределами диапазона

Очевидно, что при использовании параметра +N индексация соответствует индексации в режиме использования параметра -l. В случае выхода за пределы списка выводится сообщение об ошибке.

$ dirs -5
bash: dirs: 5: индекс стека каталогов за пределами диапазона
$ dirs -4
~
$ dirs -3
/tmp
$ dirs -2
~/openwrt/
$ dirs -1
~/wlan/
$ dirs -0
~/code/

При использовании параметра -N индексация осуществляется от конца списка.

Очистка списка сохраненных директорий

Для очистки списка сохраненных директорий используется параметр -c.

$ dirs
~ /tmp ~/openwrt/ ~/wlan/ ~/code/
$ dirs -c
$ dirs
~

После очистки в списке останется лишь домашняя директория пользователя.