如何在ssh上执行Bash别名

And*_*dyP 4 ssh bash

这是我正在尝试做的事情:

ssh andy@<ip_address> "cat .bash_aliases; sayhello"
Run Code Online (Sandbox Code Playgroud)

这是发生的事情:

alias sayhello="echo hello"
bash: sayhello: command not found
Run Code Online (Sandbox Code Playgroud)

为了更具体地解决我的问题,我试图
"sudo etherwake -i eth0 <mac_address>"通过ssh 调用命令- 这在我的本地计算机上执行(我认为),给出sudo: unable to resolve host [blabla]错误.似乎任何非标准bash命令的命令都由我的本地机器解析.

如果这就是发生的事情,我该如何解决它?如果没有,什么如何解释呢?

Dmi*_*rov 6

通常,在脚本中使用别名不是一个好主意.

然而,我可以建议一种方法来做到这一点,但要记住它是多么不安全.

  • 它依赖于eval,
  • 它将远程文件读入shell上下文.

开始了.

ssh remote_host "shopt -s expand_aliases ; source ~/.bash_aliases ; eval sayhello"
Run Code Online (Sandbox Code Playgroud)

说明:

  1. 默认情况下,仅为交互式shell启用别名扩展.打开它使用shopt -s命令.

  2. 无论如何,您需要将别名源代码发送到shell上下文中.

  3. 现在,您可以通过eval命令使用别名.