С bash есть ли способ нажать и вытолкнуть текущий рабочий каталог? Я пытался написать bash;cd dir; ./dostuff;exit;
но текущий каталог теперь dir
.
4 ответа
Есть pushd
и popd
Bash будет хранить историю посещенных вами каталогов, вам просто нужно спросить. Bash хранит историю в стеке и использует команды pushd и popd для управления стеком.
Пример:
$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Вызов bash
запускает новую подоболочку, которая имеет свой собственный ввод; ни одна из других команд не будет запущена, пока не завершится. Окружение команд, которые будут запускаться с паренами, также запустит новый подоболочек, но он будет запускать команды внутри него.
( cd dir ; ./dostuff )
Если вам не нужно несколько уровней истории каталогов, вы также можете сделать:
cd foo
# do your stuff in foo
cd -
По сравнению с pushd
/popd
, это имеет тот недостаток, что если cd foo
не работает, вы попадаете в неправильный каталог с помощью cd -
.
(Вероятно, cd -
более удобный внешний вид сценариев. «Вернемся туда, где я только что был».)
Я использую псевдоним для отслеживания изменений в моем каталоге, поэтому в «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'