I am trying to make an alias that overrides the cd
command. This is going to execute a script before and after the "real" cd
.
Here is what I have so far:
alias cd="echo before; cd $1; echo after"
This executes the echo before
and echo after command
however it always changes directory ~
How would I fix this?
I also tried cd(){ echo before; cd $1; echo after; }
however it repetedly echos "before".
The backslash escape character before a shell command disables and override any shell aliases.
If a shell is involved, aliases take precedence over $PATH lookups. Of course, later alias definitions can override earlier ones. If no shell is involved or no alias by a given name exists, $PATH lookups happen in the order in which the directories are listed in the variable.
Use a “\” (backslash) before the command to run it without the alias. The backslash escape character can be used before a shell command to override any aliases.
BASH Alias is a shortcut to run commands using some mapping. It is a way to create some shortcut commands for repetitive and multiple tasks. We create an alias in a BASH environment in specified files. We can also incorporate BASH functions, variables, etc to make the Alias more programmatic and flexible.
Just to add to @jm666's answer:
To override a non-builtin with a function, use command
. For example:
ls() { command ls -l; }
which is the equivalent of alias ls='ls -l'
.
command
works with builtins as well. So, your cd
could also be written as:
cd() { echo before; command cd "$1"; echo after; }
To bypass a function or an alias and run the original command or builtin, you can put a \
at the beginning:
\ls # bypasses the function and executes /bin/ls directly
or use command
itself:
command ls
I also tried
cd(){ echo before; cd $1; echo after; }
however it repetedly echos "before".
because it calls recursively the cd
defined by you. To fix, use the builtin
keyword like:
cd(){ pwd; builtin cd "$@"; pwd; }
Ps: anyway, IMHO isn't the best idea redefining the shell builtins.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With