通过SSH执行命令时无法使用别名

dav*_*dhq 8 ssh bash

我在.bashrc中注释掉了这一行:

# [ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)

现在别名被读取,但我仍然无法执行...:/

我们可以询问服务器是否已定义别名:

$ ssh server "cd /tmp && alias backup_tb"
alias backup_tb='pg_dump -U david tb > tb.sql'
Run Code Online (Sandbox Code Playgroud)

但它没有扩大:

$ ssh server "cd /tmp && backup_tb"
bash: backup_tb: command not found
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sta*_*005 16

引用自手册页bash:当shell不是交互式时,别名不会展开,除非使用shopt设置expand_aliases shell选项...

因此,最简单的方法是将以下行放在/home/<user>/.bashrc文件的顶部:

# comment out the original line
# [ -z "$PS1" ] && return

if [ -z "$PS1" ]; then
  shopt -s expand_aliases
  # alias ls='ls --color=always'
  # return
fi
Run Code Online (Sandbox Code Playgroud)

保存并退出.现在您可以ssh user@host "your_alias"成功运行.