push / pop текущий каталог?


66

С bash есть ли способ нажать и вытолкнуть текущий рабочий каталог? Я пытался писать, bash;cd dir; ./dostuff;exit;но текущий каталог сейчас dir.

linux  bash 

Ответы:


91

Есть pushdиpopd

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

Больше читать

Пример:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
Выдержка из ссылкиpushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
— Мастер Шеф

31

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

( cd dir ; ./dostuff )

1
Brilliant! Не нужно нажимать / выдавливать, когда нужно просто запустить команду в другом каталоге (например, обновить зависимость), а затем вернуться к текущему.
— Дан Даскалеску

12

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

cd foo
# do your stuff in foo
cd -

По сравнению с pushd/ popdэто имеет тот недостаток, что в случае cd fooнеудачи вы попадете в неправильный каталог с cd -.

(Вероятно, cd -это более удобный внешний вид сценариев. «Вернемся туда, где я только что был».)


4

Я использую псевдоним для отслеживания изменений в моем каталоге, поэтому в «cd» я могу просто вернуться туда, где я использовал «cd.», Или вернуться назад, используя «cd ..» и т. Д .;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
Можете ли вы объяснить более подробно, что делает этот код?
— bwDraco

Это умно. У меня есть псевдонимы вокруг моих pushd и popd, чтобы делать то, что мне нравится. Я использую стек каталогов все время. Я терпеть не могу смотреть где-то на CD, а затем прокручивать назад в поисках предыдущего каталога для вырезания и вставки. Я не могу выполнять большую часть своей работы в своем домашнем каталоге из-за квот, поэтому мне приходится использовать хранилище в сети.
— Майкл Мэтьюз

1
..cdДостаточно ли надежен псевдоним ? похоже, он удаляет только последние 10 элементов из стека.
— reynoldsnlp
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.