为什么我的别名不能通过 ssh 工作?

Zan*_*nna 13 ssh bash alias

我在我的文件中定义了一个别名 .bashrc

alias l.='ls -d .* --color=auto'
Run Code Online (Sandbox Code Playgroud)

这是非常有用的 :) 但它不能通过以下方式工作ssh

$ ssh localhost l.
bash: l.: command not found
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Mat*_*vid 14

尝试:

ssh localhost -t bash -ci l.
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 别名应该在~/.bashrc远程服务器上,而不是在你的本地机器上。

  • -i选项告诉bash运行交互式 shell。默认情况下,仅在交互式 shell 中启用别名。

  • -t选项告诉ssh分配伪终端。如果没有这个,bash在交互模式下启动时会发出警告消息。这也可以启用ls颜色。没有它,您将不得不使用--color=always,请参阅man ls

  • 还有另一种启用别名的方法,无需设置交互标志,即shopt -s expand_aliases. 所以你可以试试:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'
    
    Run Code Online (Sandbox Code Playgroud)

    然而:

    • .bashrc如果 shell 是交互式的,您可能只定义别名。在这个例子中,shell 在那个时候不会是交互式的。

    • 如果您尝试在同一行上定义别名,请参阅