I would like to source my ~/.zshrc
by running .
with no arguments. So this:
$ .
should do this:
$ . ~/.zshrc
I would like the normal functionality of .
to remain unchanged. The only difference should be when .
is invoked with no arguments.
Is this possible?
I have tried a few different approaches. Here is one of them:
dot_zshrc_or_args() {
if [[ $# == 0 ]]; then
\. ~/.zshrc
else
filename=$1
shift
\. $filename $@
fi
}
alias .=dot_zshrc_or_args
Here is an example showing why it does not work:
$ echo 'echo $#' > count_args.sh
$ delegate() { . ./count_args.sh }
$ delegate foo bar baz
The last command should echo 3
, but it echoes 0
if the above alias for .
has been defined.
The fundamental problem seems to be that .
is treated specially by the shell, allowing the script that it invokes to have access to all local variables including $1
, $2
, and so on. So if I try to wrap .
in another function, I will lose that behavior (as in the example above).
The two approaches I was thinking of were:
- use an alias instead of a function
- make it so that
.
is only aliased in the interactive shell, as opposed to when it is run from another function.
I can't get it to work, though, no matter what I try. Is it possible? (If not, what are the closest alternatives I could use? My end goal is to be able to quickly source my ~/.zshrc
from a shell, preferably in an intuitive and easy-to-remember way.)