Практика использования: pushd, popd, dirs



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





$ pushd /var/www/html

/var/www/html ~/Web/src



$ pushd /etc/apache2

/etc/apache2 /var/www/html ~/Web/src



$ pushd /etc/ssl/certs

/etc/ssl/certs /etc/apache2 /var/www/html ~/Web/src





Команда pushd без аргументов меняет местами два верхних каталога в стеке и переходит к новому верхнему. Давайте несколько раз переместимся между "/etc/ssl/certs" и "/etc/apache2":





$ pwd

/etc/ssl/certs



$ pushd

/etc/apache2 /etc/ssl/certs /var/www/html ~/Web/src



$ pushd

/etc/ssl/certs /etc/apache2 /var/www/html ~/Web/src





Что делать, если нужно перейти в другие каталоги стека, помимо двух верхних? pushd и popd принимают целочисленные аргументы для данной задачи. Давайте для наглядности выведем текущий стек в столбец:





$ dirs -v

0 /etc/ssl/certs

1 /etc/apache2

2 /var/www/html

3 ~/Web/src





Команда "pushd +N" сдвигает N каталогов с вершины стека в самый низ, а затем переходит к новому верхнему. Если нужно попасть в "/var/www/html" и сохранить структуру стека, используем:





$ pushd +2

/var/www/html ~/Web/src /etc/ssl/certs /etc/apache2





Отрицательный аргумент (-N) сдвигает каталоги в противоположном направлении. Чтобы перейти к каталогу в нижней части стека, можно либо сдвинуть все, кроме последнего, либо просто использовать "pushd -0":





$ dirs

/etc/apache2 /etc/ssl/certs ~/Web/src /var/www/html



$ pushd -0

/var/www/html /etc/apache2 /etc/ssl/certs ~/Web/src





Можно также удалять каталоги из стека, используя popd с аргументом. Команда "popd +N" удаляет каталог, расположенный на позиции N, из стека. Отрицательный аргумент (-N) означает отсчет снизу. Подсчет начинается с нуля, поэтому "popd +1" удаляет второй каталог сверху:





$ dirs

/var/www/html /etc/apache2 /etc/ssl/certs ~/Web/src



$ popd +1

/var/www/html /etc/ssl/certs ~/Web/src



$ popd +2

/var/www/html /etc/ssl/certs





Будьте аккуратны и внимательны. Если вы используете команду cd, то самый верхний элемент стека затрется на текущий активный каталог. Эту проблему мы научимся решать в пятницу)



LinuxCamp | #shell