Here's a tool that I've been using daily since 2005 at least. I had a write-up on my old website, but with its recent disappearance it seems like a good time to update it and publish it here.
If you add the code below to your .bashrc, then you can type "push here" in one terminal window and then "pop here" in another.
In other words, it's a simple bookmark system for directories backed by a persistent on-disk file-based database (i.e. a text file :-) ). You may find this useful to support sshing into multiple machines that have a shared home folder, or to synchronise windows in a screen session or tabs in a terminal emulator.
See you all next year...🎉
popnamelist="$HOME/.popnames.txt" # Supporting code for 'pop' function popname () { if [ -z "$1" ]; then echo " Syntax: popname TAG" return 1 fi if [ -f $popnamelist ]; then grep "^$1" $popnamelist > $popnamelist.tmp if [ ! -s $popnamelist.tmp ]; then echo "No such tag" else awk '{print $2}' $popnamelist.tmp fi else echo " There isn't anything to pop!" return 1 fi } # Pushes the current directory into a 'memory slot' indexed by a tag # See also 'pop' function push() { if [ -z "$1" ]; then echo " Syntax: push TAG" return 1 fi touch $popnamelist grep -v "^$1" $popnamelist > $popnamelist.tmp echo "$1 `pwd`" >> $popnamelist.tmp sort $popnamelist.tmp > $popnamelist rm $popnamelist.tmp } # Pops the directory associated with 'tag' and makes it the current # directory. # Then you can use: pop mytag # or echo `popname mytag`, or cat `popname mytag`/readme.txt function pop() { if [ -z "$1" ]; then echo " Syntax: pop TAG" echo cat $popnamelist else cd `popname $1` fi }
No comments:
Post a Comment