С bash есть ли способ нажать и вытолкнуть текущий рабочий каталог? Я пытался писать, bash;cd dir; ./dostuff;exit;
но текущий каталог сейчас dir
.
С bash есть ли способ нажать и вытолкнуть текущий рабочий каталог? Я пытался писать, bash;cd dir; ./dostuff;exit;
но текущий каталог сейчас dir
.
Ответы:
Есть 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'
..cd
Достаточно ли надежен псевдоним ? похоже, он удаляет только последние 10 элементов из стека.
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.