Как перейти к предыдущему рабочему каталогу в терминале?


213

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

Например, я в /opt/soft/binи я cdв /etc/squid3и я хочу , чтобы вернуться к первой директории.

Ответы:


284

Вы можете использовать

cd -

или вы могли бы использовать

cd $OLDPWD

3
Есть идеи, почему имя каталога выводится на консоль при использовании «cd -»?
дтмланд

4
Возможно, поскольку старые оболочки не отображали имя текущего каталога в приглашении, было полезно увидеть имя каталога при вводе cd -. Например, когда вы печатаете, cd /usr/localвы знаете, что находитесь внутри /usr/loal, но когда вы печатаете, cd -вы не всегда помните, из какого каталога вы пришли. Так что это спасает вас от набора текста cd -; pwd. Но это все домыслы.
Рафаэль Аренс

2
Или вы можете использовать псевдонимы: установите псевдоним, а alias -- -='cd -'затем использовать -(1 символ) вместо cd -(4 символа). Быстрее:D
ADTC

2
Как я мог жить без этого?
ВСЗМ

1
@ AndréKuhlmann Вы можете сделать cd -дважды. Как cd /; cd /usr; cd -; cd -вы должны быть в /usr. Но, может быть, я скучаю по твоему вопросу.
Рафаэль Аренс

54

Другие ответы определенно полны в смысле прямого ответа. cd -и cd $OLDPWD, безусловно, основной выбор для этого. Тем не менее, я часто нахожу, что с работы pushdи popdработает лучше.

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

Расширенный пример

Основное отличие легко показать на примере.

$ cd dir1
$ pushd dir2

На данный момент у вас есть стек каталогов, который есть dir2, dir1. Запуск pushdбез аргументов вернет вас обратно в dir1стек сейчас как dir1, dir2. popdсделал бы то же самое, но оставил бы вас с пустым стеком каталогов. Это не сильно отличается от того, как вы были бы с cd -рабочим процессом.

Однако теперь вы можете менять каталоги несколько раз и вернуться к dir1. Например,

$ cd dir1
$ pushd dir2
$ cd dir3

Если вы бежите popdв этот момент, вы вернетесь к dir1.


2
Вы также можете складывать каталоги, так что используйте pushdи возвращайтесь к предыдущей папке, popdнажимая -ing.
Бернхард

1
Конечно. Я почти привел большой пример, который включал проверку стека dirs -v, но реальность для меня заключается в том, что часто простой случай - это все, что я действительно использую. (Или, что еще хуже, я делаю ошибку, когда пытаюсь push +2или что-то подобное) Кроме того, я подумал, что ребенок делает шаги, чтобы заставить кого-то попробовать рабочий процесс. :)
Джош Берри

Как вы cdна вершину стека без сования?
Джон Дитон

18

Вы должны использовать:

cd ~-

он делает то же, что и cd -(из принятого в настоящее время ответа) без раздражающего эха каталога, и его легче набирать, чем cd "$OLDPWD"или cd - > /dev/null.


2
Перенаправление эха в нулевой файл! Это гений!
Рам

2
Эхо показывает новый каталог, а не предыдущий. И я нашел бы это полезным, так что я знаю, где я сейчас нахожусь, особенно если я нахожусь в оболочке, которая показывает только текущее имя каталога (или вообще ничего) в приглашении, и я слишком обеспокоен, чтобы изменить подскажите, чтобы показать полный путь. Конечно, если ваша подсказка уже показывает полный путь, эхо будет избыточным и раздражающим. В этом случае, я думаю, вы можете попытаться сделать это, alias -- -='cd "$OLDPWD"'используя -(1 символ) вместо cd ~-(5 символов). :)
ADTC

Источник и объяснение: unix.stackexchange.com/a/330885/38213 Спойлеры, - это операнд, а ~ это псевдонимы пути. Так cd ~-/..работает, но cd -/..нет!
Рэй Фосс


3

Вы можете «определить ключ» для «cd -», отредактировав файл «~ / .bashrc» и добавив псевдоним для команды. Например, вы можете добавить 'cdc', чтобы сделать его 'cd -', который предоставил бы вам более короткий способ добраться до последнего каталога, добавив:

alias cdc='cd -'

Таким образом, вы просто наберете «cdc», и вы попадете в ваш последний рабочий каталог.


5
И не смущайте вас, когда вы используете систему, в которой этот псевдоним отсутствует. Это экономит время на ввод одного символа время от времени. Зачем вообще беспокоиться?
CVn

2
«В терминале, как я могу определить ключ для перехода в предыдущий каталог», я никогда не путаюсь. Это просто ярлык, когда вы находитесь в другой системе, просто используйте длинную руку.
Atari911

@ Atari911 отличный вопрос! вот ответ: stackoverflow.com/questions/4200800 Вот что я сделал (привязанный F12): bind '"\e[24~":"\C-k \C-ucd -\n"'(или, более предпочтительно, переместите его в inputrcфайл, как указано в ответе).
ADTC

1

cd ..Переходит в папку прецедента в дереве папки.
cd -идет в папку, в которой это было раньше. Эта команда не работает на некоторых дистрибутивах (Ubuntu 16.04), работает в Debian 9.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.