如何通过ssh执行Bash别名

2024-10-01 00:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是:

ssh andy@<ip_address> "cat .bash_aliases; sayhello"

发生的情况如下:

^{pr2}$

为了更具体地说明我的问题,我尝试调用命令
"sudo etherwake -i eth0 <mac_address>"over ssh——这在我的本地计算机上执行(我想),给出一个sudo: unable to resolve host [blabla]错误。似乎所有不是标准bash命令的命令都是由本地计算机解析的。在

如果真是这样,我该怎么办?如果不是,解释是什么?在


Tags: 命令ipbashaddress计算机sudo情况ssh
3条回答

好吧,这是一个相当混乱的黑客,但它是有效的:

$ ssh xxx.xxx.158.40 'source aliases; alias'

alias emacs='emacs -nw'
alias l.='ls -d .*'
alias ll='ls -l'
alias sayhello='echo hello'
alias vi='vim'
alias which='alias | /usr/bin/which  tty-only  read-alias  show-dot  show-tilde'

$ ssh xxx.xxx.158.40 'source aliases; $( alias sayhello | sed -e "s/.$//" -e "s/.*=.//" )'

hello

这也适用于:

^{pr2}$

@ajreal在上面的评论中给出了一个简单的解决方案,只要把你想发生的事情放到一个文件中,然后执行这个文件。在

所以我在主机上创建了一个名为sayhello.sh(只包含echo Hello)的文件,然后在我的本地计算机上使用

ssh andy@<ip_address> "sh sayhello.sh"

一般来说,在脚本中使用别名不是一个好主意。在

不过,我可以建议一种方法来做,但要牢记这是多么不安全。在

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

我们开始吧。在

ssh remote_host "shopt -s expand_aliases ; source ~/.bash_aliases ; eval sayhello"

说明:

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

  2. 无论如何,您都需要将别名来源到shell上下文中。

  3. 现在您可以通过eval命令设置为使用别名。

相关问题 更多 >