Вопрос: Как я могу перейти на предыдущий каталог вместо того, чтобы идти вверх?


В настоящее время я трачу много своих рабочих часов, перемещаясь назад и вперед между двумя путями, которые очень далеки от дерева и отвлекаются друг от друга у корня. Мне кажется, что моя жизнь будет намного легче, если будет аргумент в пользу cd который переводит пользователя в последний каталог, в котором они были.

То есть, если я нахожусь:

/etc/foo/bar/baz/moo

и затем введите:

cd /var/lib/fubarred_app/blargh/logs

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

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

Есть ли короткая команда, которая просто позволит мне перейти в предыдущий каталог?


209
2017-08-17 20:18


Источник


в дополнении к @Bryanотличный ответ, вы можете подумать о создании пары псевдонимов для каждого пути, чтобы вы могли просто набрать что-то вроде:bazmoo" или "blarghlog"в подсказке :) - warren
Почему бы вам просто не использовать Экран GNU? - Shi
Какая оболочка? это имеет огромное значение. - Randal Schwartz
@warren то же самое. это мой предпочтительный способ сделать все. половина того, что я использую для моего компьютера, теперь имеет свой собственный псевдоним ... =) - ixtmixilix
Фасд потрясающий. Проверьте это. - majkinetor


Ответы:


Команда

cd -

будет выполнять своп, который вам нужен на большинстве основных оболочек, более старый вариант

cd "$OLDPWD"

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


Персональная страница POSIX для cd отмечает:

ОПИСАНИЕ

Если во время выполнения вышеуказанных шагов изменяется переменная среды PWD, переменная среды OLDPWD также должна быть изменена на значение старого рабочего каталога (то есть текущего рабочего каталога непосредственно перед вызовом cd).

ОПЕРАНДЫ

-Если в качестве операнда используется дефис, это будет эквивалентно команде:

cd "$OLDPWD" && pwd 

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


292
2017-08-17 20:23



Имейте в виду, что это действительно зависит от оболочки, которую вы используете, и поскольку вы не указали, было бы трудно дать несуществующий «переносимый» ответ. - Randal Schwartz
@Randall, Возможно, вы могли бы объединить все ваши комментарии в оболочку в один ответ Voltron-Shell. - hyperslug
@Randall. Я использовал bash. Он работает в ksh и zsh тоже. Кстати, я впервые научился программировать с 1994 года Изучение Perl так что извините меня, пока я фанат. :) - Yitzchak
Хм, я использовал cd $OLDPWD для этого. Приятно, что обычные раковины предлагают путь более короткой формы. - ulidtko
@sinni Некоторые ароматы делать иметь pushd, и, по крайней мере, это встроенный bash, - slhck


В дополнение к ответу Брайана, стоит упомянуть, что есть также pushd а также popd, которые создают каталоги, такие как стек. Это также доступно в Windows NT; однако он не доступен во всех оболочках.

Например, мы можем перейти к трем различным каталогам, и вы всегда увидите свой стек, когда звоните pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

И когда вы звоните popd три раза подряд вы попадаете в эти каталоги в стеке в обратном порядке. В то же время стек будет опустошен снова.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Если вы используете Zsh; он имеет опцию AUTO_PUSHD, которая автоматически активирует cdв стек.


105
2017-08-17 20:35



pushd и popd недоступны во всех оболочках. - Randal Schwartz
@ Wiesław: Действительно? Я хочу, чтобы у bash было это ... Конечно, я мог бы псевдоним cd в pushd, и в основном это было бы одинаково. - Chris Charabaruk
Или псевдоним pd для pushd и оба. BTW pushd (или pd, если вы его псевдоним) сам поменяет текущий каталог и последний-толкаемый каталог, по существу выполняя то, что делает «cd -». - JRobert
Мне нравится концепция, но она никогда не привыкла к ним. - Thorbjørn Ravn Andersen


Есть некоторые «прыгающие» программы

  • autojump (поддерживается с основными функциями)
  • j2  (видимо, не поддерживается некоторыми дополнительными функциями)
  • Z (поддерживаемая версия «j» с расширенными функциями)

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

В твоем случае

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Вы можете назначить любую букву, которую вы хотите для этих программ, «j» - это традиция :)

j2 и z поддерживают несколько поисковых терминов, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... и больше вариантов.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

13
2017-08-17 23:52



«j» явно является оболочкой. Вы этого не сказали. - Randal Schwartz
@Randal: Как это зависит от оболочки? Это программа. - Fixee
Я идиот. :) Я вижу это сейчас. - Randal Schwartz


В дополнении к cd - а также cd $OLDPWD

Вы можете использовать поиск истории, нажав CTRL-R и набрав несколько букв cd которую вы ввели ранее. прессование CTRL-R неоднократно приносят старые матчи.

Этот метод будет более полезен, если у вас есть более двух путей для изменения.


10
2017-08-18 09:44



CTRL-R не обязательно поможет. Возможно, вы были в / some / obscure / directory / deep и сделали «cd evendeeperdir», затем перешли в ~ / somehere / different. - justintime
Большой! Он работает для других вещей, чем cd, большая помощь! - Niloct


Вы можете использовать это, чтобы легко создавать псевдонимы для каталогов:

a() { alias $1=cd\ $PWD; }

a 1

и позже:

1

9
2017-08-18 01:50



Только на оболочке, которая понимает псевдонимы и функции. Не все так делают. - Randal Schwartz
поэтому это пропускает ввод alias = части? хммм - Xen2050


bashmarks позволит вам закладок серии папок и прыгать между ними с завершением табуляции:

Чтобы пометить папку, просто перейдите в эту папку, а затем запишите ее так:

bookmark foo

Закладка будет называться «foo». Когда вы захотите вернуться в эту папку, используйте:

go foo

Чтобы просмотреть список закладок:

bookmarksshow

Завершение работы вкладки, чтобы перейти к закладке shoobie, просто:

go sho[tab]

6
2017-08-18 08:54





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


4
2017-08-18 03:00



Однако, если вы регулярно используете / редактируете предыдущие команды, вы не используете общую историю (может быть, сброс будет получен ...?) - Xen2050
@ Xen2050 См. Оболочку share_history в zsh. - Radon Rosborough


Я знаю, что это не является, строго говоря, ответом на ваш вопрос, но это полезно для достижения цели отвезти вас в ваши важные справочники,

в любом нисходящем UNIX-bash вы можете использовать CDPATH для расширения папки, в которой выполняется поиск cd-команды.

из моего .bashrc-файла:

export CDPATH='.:~/source/'

CD первый поиск в вашей текущей папке, затем поиск в моем каталоге-каталоге-каталоге.

cd myproject

.. принимает меня к ~ / Источники / MyProject откуда я сейчас живу.

Простая небольшая функция, которая очень помогла моей навигации каталогов.


4
2017-08-19 11:11



+1 Это добавляет папку CDPATH в cdСписок автозаполнения (TAB), который является хорошим. Но если . не входит и если в папке CDPATH есть папка с то же имя как один в вашем текущем каталоге, тогда cd samename перейдут в каталог CDPATH и не тот, который находится в текущем каталоге, который является плохим. Приходится использовать cd ./samename чтобы попасть в папку dup. - Xen2050
Да, хороший комментарий. Всегда включайте первый ,, или вы будете испытывать странные вещи. - phareim


Ага, cd - это путь, но я беспокоюсь о нехватке силы, которую вы получили в своей оболочке. popd а также pushd также хороши, и что j вещь тоже хорошо выглядеть.

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

Сообщение в блоге для моей утилиты управления каталогом

Если это сработает для вас, тогда это потрясающе, но если это не значит, тогда обещайте мне, что получите что-то еще :) Вы просто не можете жить с cd в одиночестве.


3
2017-08-18 14:18





Если у вас всего 2 каталога, самый простой способ, как уже упоминалось,

cd -

Когда у меня были такие вещи в прошлом, у меня было несколько трюков, которые я сделал, это может быть полезно.

  1. Поместите команды псевдонимов в файл .cshrc, что-то вроде этого

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. Связывание ссылок с интересующими вас способами из моего домашнего каталога. Это одно время.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

Это позволит легко изменить каталог:

   cd ~/moo
   cd ~/blargh

3
2017-08-19 03:08