【问题标题】:Cannot use alias while executing a command via SSH通过 SSH 执行命令时无法使用别名
【发布时间】:2014-04-27 13:51:13
【问题描述】:

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

# [ -z "$PS1" ] && return

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

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

$ ssh server "cd /tmp && alias backup_tb"
alias backup_tb='pg_dump -U david tb > tb.sql'

但它没有展开:

$ ssh server "cd /tmp && backup_tb"
bash: backup_tb: command not found

有什么想法吗?

【问题讨论】:

  • 注意这些是不同的东西。 .bashrc 中的别名适用于存储此文件的服务器,而您尝试在 ssh 命令中使用它们,因此在另一台服务器中使用它们。
  • @fedorqui 他实际上在远程.bashrc中定义了别名,第一个ssh命令显示定义存在。第二个表明它没有被尊重。
  • @HenkLangeveld 你说的完全正确,没有引起足够的重视。
  • 为了清晰起见,我编辑了这个并拆分了两个 ssh 部分。
  • 我认为这可能与.bashrc.bash_profile 有关。 What's the difference between .bashrc, .bash_profile, and .environment?

标签: bash ssh


【解决方案1】:
# WARNING!!!! Just effective in openssh-server.!!!!!!!

# cd your loacl user .ssh path 
# if you want to make all user has the same alias you should go to 
#'/etc/ssh' touch a file 'sshrc'
# what is 'sshrc'? he has the same function as 'rc.local',just a shell 
# script when you first login.  

# The following is a configuration of the current user .
cd ~/.ssh

touch sshrc  

chmod +x sshrc

#edit sshrc and type 

alias ll="ls -lah --color"

#Apply changes

source sshrc 

【讨论】:

  • 请解释一下
  • sshrc 和 bashrc 一样会在登录时运行
  • 忘了说只有openssh有效。
  • 在答案中解释一下。请注意comments are temporary and could be deleted anytime。如果您有其他信息要提供,请点击帖子下方的 "edit" 链接更新您的答案。 See here 了解详情。谢谢。
【解决方案2】:

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

因此,IMO 最简单的方法是将以下几行放在 /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

保存并退出。现在你可以成功运行ssh user@host "your_alias"了。

【讨论】:

  • 啊,是的!我之前正在测试这个,但我还没有注释掉 "[ -z "$PS1" ] && return" 行......所以它没有工作,因为 .bash_aliases 没有被加载。所以解决方案是做both这些事情。谢谢!
  • 我会改写或删除关于ssh user@host "alias" 的最后一句话。问题已经表明alias 命令可以在没有shopt -s ... 的情况下与我们一起使用。
最近更新 更多