为什么我的别名不能在ssh上使用?


9

我在我的帐户中定义了一个别名 .bashrc

alias l.='ls -d .* --color=auto'

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

$ ssh localhost l.
bash: l.: command not found

这是为什么?


1
.bashrc仅当外壳是交互式的时才读取。
— user4556274'8

1
如果您的别名位于ssh之上,则可能没有颜色,如果您将别名更改为,alias l.='ls -d .* --color'那么颜色就会出现。只是想我会补充。至少我正在经历。
— Terrance

@Terrance我想知道...尽管更改别名(并执行source .bashrc)后仍然像以前一样获得颜色(和列),但仍然没有颜色(和列)
— Zanna 2016年

1
啊哈!我想我明白了。alias l.='ls -dC .* --color'在C显示列的位置尝试使用别名。
— Terrance

1
我编辑了答案以解决颜色问题。
— Matei David

Answers:


10

尝试:

ssh localhost -t bash -ci l.

注意:

  • 别名应位于~/.bashrc远程服务器上,而不是本地计算机上。

  • 该-i选项指示bash运行交互式外壳程序。默认情况下,仅在交互式Shell中启用别名。

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

  • 还有另一种启用别名而不设置交互式标志的方法,即shopt -s expand_aliases。因此,您可以尝试:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'

    然而:

    • 您.bashrc可能仅在别名是交互式的shell采购时定义别名。在此示例中,该外壳在那时将不是交互式的。

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


1
确实有效....根据您的解释,当然,但是我ssh对自己很
— 满意

1
我的意思是一般使用ssh。是的,localhost那不是问题。
— Matei David

ssh ... <cmd><cmd>完成后退出。如果要在之后保留外壳ls,请尝试ssh localhost -t 'bash -ci "l.; exec bash"'。
— Matei David

啊哈,我明白了。非常感谢。我要删除我的评论:)
— Zanna
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.