поточний каталог 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
Блискуче! Не потрібно натискати / виконувати, коли наміром є просто запустити команду в інший каталог (наприклад, оновити залежність), а потім повернутися до поточної.
Дан Даскалеску

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

Це розумно. У мене є псевдоніми навколо мого пудда і popd, щоб робити якісь речі, які мені подобаються. Я весь час використовую стек каталогів. Я ненавиджу спостерігати за тим, як люди купляють компакт-диски, а потім прокручують назад, шукаючи попередній каталог, щоб вирізати та вставити. Я не можу зробити більшу частину своєї роботи в домашньому каталозі через квоти, тому мені доводиться використовувати об'єднане сховище в мережі.
Майкл Метьюз

1
Чи ..cdдостатньо надійний псевдонім ? схоже, вилучіть лише 10 останніх елементів із стека.
reynoldsnlp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.