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 tells bash to run an interactive shell. Aliases are enabled by default only in interactive shells.

  • The -t options tells ssh to allocate a pseudo-tty. Without this, bash emits a warning message when started in interactive mode. This also enables ls colors. Without it, you'd have to use --color=always, see man 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.