如何在linux机器上执行远程别名?

时间:2016-08-01 15:41:22

标签: linux

主机B定义了别名

alias command='ps -aef|egrep "a|b"|egrep -v "c|grep|ksh|sshd|ssh|ps |tail|bash|su \-"'

如何从方框A调用此别名?

ssh user@B "command"不起作用。

1 个答案:

答案 0 :(得分:2)

在bash中

将其定义为函数:

mycommand() {
  ps -aef | \
    egrep "a|b" | \
    egrep -v "c|grep|ksh|sshd|ssh|ps |tail|bash|su -"
}

...然后告诉shell在生成远程命令时向该函数发出源:

ssh user@B "$(declare -f mycommand); mycommand"

可以用别名做类似的事情,但是eww:

# define alias locally
alias mycommand='ps -aef|egrep "a|b"|egrep -v "c|grep|ksh|sshd|ssh|ps |tail|bash|su \-"'

ssh user@B bash -s <<EOF
shopt -s expand_aliases  # enable aliases on remote shell
$(alias -p)              # dump all aliases to remote shell
mycommand                # invoke desired alias
EOF

请注意expand_aliases shell选项:默认情况下别名仅在交互式shell 中可用,并且使用作为参数传递的命令行调用的shell不是交互式的。

在ksh

使用typeset -f而非declare -f列出功能:

ssh user@B "$(typeset -f); mycommand"