With bash is there a way to push and pop the current working directory? I tried writing
bash;cd dir; ./dostuff;exit; but the current directory is now
Bash will keep a history of the directories you visit, you just have to ask. Bash stores the history in a stack and uses the commands pushd and popd to manage the stack.
$ pwd; pushd /tmp; pwd; popd; pwd /home/me /tmp ~ /tmp ~ /home/me
bash starts a new subshell, which has its own input; none of the other commands will run until it exits. Surrounding the commands to be run with parens will also start a new subshell, but it will run the commands within it.
( cd dir ; ./dostuff )
If you don't need multiple levels of directory history, you can also do:
cd foo # do your stuff in foo cd -
popd, this has the disadvantage that if
cd foo fails, you end up in the wrong directory with
cd - is more handy outside scripts. "Let's go back where I just was.")
I use alias for keeping track of my directory changes so to 'cd' somewhere I can just go back to where I was using 'cd.', or go back two using 'cd..', etc.;
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'