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

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

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

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

/etc/foo/bar/baz/moo

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

cd /var/lib/fubarred_app/blargh/logs

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

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

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

решение1

Команда

cd -

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

cd "$OLDPWD"

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


TheСтраница руководства POSIX дляcdупоминает:

ОПИСАНИЕ

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

ОПЕРАНДЫ

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

cd "$OLDPWD" && pwd 

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

решение2

В дополнение к ответу брайана, стоит упомянуть, что есть также 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' в стек.

решение3

Есть несколько программ "прыжков"

  • автопрыжок(поддерживается с базовыми функциями)
  • j2 (по-видимому, не поддерживается, но есть некоторые расширенные функции)
  • з(поддерживаемая версия "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

решение4

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

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

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

Связанный контент