Why doesn't my alias work over ssh?
I have an alias defined in my .bashrc
alias l.='ls -d .* --color=auto'
It's very useful :) but it doesn't work via ssh
:
$ ssh localhost l.
bash: l.: command not found
Why is that?
Solution 1:
Try:
ssh localhost -t bash -ci l.
Note:
The alias should be in
~/.bashrc
on the remote server, not on your local machine.The
-i
option tellsbash
to run an interactive shell. Aliases are enabled by default only in interactive shells.The
-t
options tellsssh
to allocate a pseudo-tty. Without this,bash
emits a warning message when started in interactive mode. This also enablesls
colors. Without it, you'd have to use--color=always
, seeman ls
.-
There is another way to enable aliases, without setting the interactive flag, namely
shopt -s expand_aliases
. So you could try:ssh localhost 'bash -c "shopt -s expand_aliases; l."'
However:
Your
.bashrc
might only define aliases if the shell sourcing it is interactive. In this example, the shell would not be interactive at that time.If you try to define aliases on the same line, see this.