I want to declare aliases which append argument if no argument specified.
For example,
JavaScript
x
alias vimtutor=‘vimtutor $([ $# -eq 0 ] && echo ja.utf-8)’
I expected executing vimtutor
with no argument is replaced to vimtutor ja.utf-8
, but it doesn’t work properly.
So, I tried some tests on bash shell.
JavaScript
$ echo $#
0
JavaScript
$ echo a b c $#
a b c 0
JavaScript
$ echo $0
-bash
And I understood it is impossible to get command arguments now executing in normal way.
Now, I declare shell function showing below,
JavaScript
vimtutor(){ /usr/bin/vimtutor $([ $# -eq 0 ] && echo ja.utf-8) “$@“; }
It woks as expected but feel not smart way.
Is there any idea to solve this problem?
Advertisement
Answer
The variables $#, $0, etc when used in an alias references your bash session variables; the arguments used when your bash session was started, not the arguments passed to the alias command.
I suggest you put your command in a script, and alias to that script. I.e.
JavaScript
$ echo 'vimtutor $([ $# -eq 0 ] && echo ja.utf-8)' > ~/vimtutor.sh
$ chmod +x ~/vimtutor.sh
$ alias vimtutor='~/vimtutor.sh'