Skip to content

Instantly share code, notes, and snippets.

@mbadran
Created June 16, 2009 01:30
Show Gist options
  • Save mbadran/130469 to your computer and use it in GitHub Desktop.
Save mbadran/130469 to your computer and use it in GitHub Desktop.
replace cd in bash to (silent) pushd
alias cd="pushd $@ > /dev/null"
@juliyvchirkov
Copy link

juliyvchirkov commented May 31, 2021

brilliant thread, guys!

the last revision by @3v1n0 - it's true oldschool hell of shell programming, applause! 🎉🥁🎊

close to ideal, except one missing thing, the last one that matters - the special behaviour of cd -P

description from cd --help of bash builtin

-P use the physical directory structure without following symbolic links:

resolve symbolic links in DIR before processing instances of `..'

it's a pity, since I find this behaviour very useful for both interactive and scripted scenarios, and advise -P everyone - it even worth to be mentioned as alias cd='cd -P' at /etc/profile

however, as I see from your experiments above, one can try to mimic native cd -P behaviour like this - pushd "$(realpath "$1")" (nb! not tested)

if one implements this update during a week, that would be great! and I'll try to do it myself on weekends if not

@juliyvchirkov
Copy link

juliyvchirkov commented Jun 1, 2021

and one more note to catch up especially for mr. @keltroth and mr. @3v1n0

as it caught my eye, you both till the last revision leave $OLDPWD value unescaped, and it's quite dangerous, 'cause if the previous dir will include spaces in name - with cd - one will definitely fail to return. and since everything in this routine is silenced with /dev/null, it would be an adventure to find out what a hell is going on. been there, seen that

@juliyvchirkov
Copy link

juliyvchirkov commented Jun 1, 2021

I've been fond of tuning little things of that kind a lot, it's very exciting sometimes

the last for today - three more functions on topic from my own regular set of /etc/bash.functions

pushd () {
    builtin pushd ${1} >/dev/null 2>&1
}

popd () {
    builtin popd ${1} >/dev/null 2>&1
}

dirs () {
    builtin dirs -v
}

xterm

respect, guys!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment