52

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

4 ответа4

78

Есть pushd и popd

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

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

Пример:

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

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

( cd dir ; ./dostuff )
10

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

cd foo
# do your stuff in foo
cd -

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

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

3

Я использую псевдоним для отслеживания изменений в моем каталоге, поэтому в «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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .