Как стать автором
Обновить

Комментарии 39

> Мало кто знает о таких командах bash как pushd и popd

Пользователи линукс уже не те.
Кстати, в Windows эти команды тоже есть.
Причем работают и для удаленных шар:
pushd \\domain\netlogon выполнит
net use * \\domain\netlogon (подцепим шару на свободную букву — Z:)
pushd Z:\
А как можно просмотреть стек? Что будет, если передать команде pushd несуществующий путь?
При вызове pushd, переходя в директорию, он выводит список директорий в стеке.

А по поводу несуществующего:
pushd /we/e
bash: pushd: /we/e: Нет такого файла или каталога

просто игнорирует
> А как можно просмотреть стек?

echo ${DIRSTACK[*]}

${DIRSTACK[0]} — текущая директория
Вот это круто! Очень удобно.
Спасибо, добавил в статью
Вот этого не хватало. Спасибочки.
стек показывает команда dirs — ss64.com/bash/dirs.html
По моему в скриптах лучше путь полностью указывать, либо относительный.
По моему скрипты лучше писать, или не писать)
`cd` переход в домашнюю директорию пользователя.
`cd ~user` переход в домашнюю директорию другого пользователя.
`cat /proc/cpuinfo`
`watch !!` подставит предыдущую команду текущей.
`!123` выполнит команду под номером из bash_history.
`sl[ctrl+t]` поменять местами два символа.
Спасибо, также добавил в топик
за ctrl+t отдельное спасибо)
Сколько раз нужно нажать ctrl+t, чтобы получить слово «РОССИЯ» из «СИСЯРО»?
`cd ~-` переход в предыдую директорию
`cd ..`
не?
не в директорию уровнем выше, а в предыдущую. Попробуйте:
cd /tmp
cd
cd ~-
pwd
согласен.
а чем отличается от просто «cd -»?
По всей видимости, ничем ) Работает в обоих случаях.
Если после cd ~- надать tab, то bash подставит вместо ~- полный путь. В скриптах разницы никакой.
У меня не работает.
в случае с`watch !!`
если использовать пайпы, например:
#$ ps ax | grep nginx
то работает
#$ watch "!!"
У меня складывается ощущение что можно смело создавать блог «Маны» и туда раз в день комунибудь копипастить русский ман. Предела удивлению людей не будет :)
Это я не с наездом о том что топик бесполезный, я только рад, что много людей наконец-то узнало об этих командах. Это я к тому, чтобы както людям информации больше доносить, раз они читают не маны, а хабр :)
Читая маны все не запомнишь, а во время чтения трудно понять что полезно, а что не очень. Такие топики полезны тем, что они описывают удобные возможности, о которых написано в километровых манах, но которые пропускают и не замечают.
Рекомендую linsovet.com, там время от времени очень полезные советы проскакивают.
Спасибо, добавил в избранное. Пригодится)
Для скриптов — годится. Для повседневной работы лично мне удобнее использовать «псевдо-умную» навигацию типа z. Сама мониторит в каких папках ты работаешь чаще и по заданному фрагменту в 3-4 буквы переходит в наиболее подходящую. Сам на днях начал писать что-то подобное только полегче и на С вместо bash/awk/sed: https://bitbucket.org/trikita/2
Для скриптов на самом деле не очень годится. В чистом sh их нет, в его реализациях в виде ash/dash — соответственно, тоже нет. А тащить за собой большой и неповоротливый bash ради такого как-то обидно…
В свое время сам интуитивно догадался о наличии pushd и popd. Они просто должны были быть :)
А как вы используете эти команды для решения своих реальных задач? Потому что, зная о их существовании, придумать этим командам применения не могу.
У меня например есть скрипт для перекидывания файлов на мой мп3шник. Он сначала в стек кидает папку откуда, потом определяет и кидает папку куда, и папку с конфигом. Таким образом я избавляюсь от 2х лишних переменных. Ну и предпочтительнее использовать pushd/popd в скриптах — очевиднее, чем «cd -» при чтении скриптов
Ну например скрипт для копирования музыки на мой mp3шник.
Есть 3 директории — папка плеера, с музыкой и с настройками. И нужно сделать некоторые действия в этих 3х папках, при чем не по одному разу. Можно использовать 3 переменные, а можно так организовать стек, что достаточно будет делать pushd/popd.

Вообще предпочтительнее использовать pushd/popd в скриптах, так как при чтении понятнее и очевиднее назначение push и pop, чем cd / cd —
Позволю себе не согласиться. Лично мне через год/в чужом скрипте будет понятнее команда cd $configdir чем popd. Да и (опять же, по моей логике) все пользовательские переменные (каталоги с конфигами/файлами/источники-премники) и без того определяются как переменные — для того, чтобы их можно было указать в файле конфигурации или как параметр при запуске скрипта.

Тем не менее, благодарю за объяснение.

P.S. Хабр проглючил — пришло на почту уведомление об ответе. Перешел на хабр, обновил коментарии — ничего. Опять пришло уведомление. Снова пришел на хабр — уже два коментария. Судя по тому, что они одинаковы по смыслу, у вас то же самое получилось.
Именно, написал комент, обновил — нету, написал заново.
>grep push .zshrc
setopt autopushd pushdminus pushdsilent pushdtohome

Очень удобно.
Всех с началом недели простых вещей для линукса! :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации