为什么我的别名不能在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.