ssh命令执行不考虑.bashrc | .bash_login |的.ssh / RC?

时间:2009-07-29 06:40:39

标签: bash ssh

我正在尝试通过ssh远程执行命令,例如:

ssh <user>@<host> <command>

需要执行的命令是别名,在.bashrc中定义,例如。

alias ll='ls -al'

那么最后应该执行以下命令:

ssh user@host "ll"

我已经发现.bashrc只能获得交互式shell,所以在.bash_login中我放了:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

我还尝试直接在.bash_login中定义别名。

我还尝试将.bashrc的别名定义/源代码放在.bash_profile中,也放在.ssh / rc中。但这没有任何作用。 请注意,我无法更改ssh命令的调用方式,因为这是某些二进制安装脚本的一部分。我唯一能修改的就是环境。执行ssh命令时是否还有其他可能来源这个别名?是否有一些ssh配置需要调整?

5 个答案:

答案 0 :(得分:36)

来自bash的手册页:

  

如果shell不是交互式的,则不会展开别名,除非使用expand_aliases设置shopt shell选项

有几种方法可以做到这一点,但最简单的方法是将以下行添加到.bashrc文件中:

shopt -s expand_aliases

答案 1 :(得分:26)

而不是:

ssh user@host "bash -c ll"

尝试:

ssh user@host "bash -ic ll"

强制bash使用“交互式shell”。

答案 2 :(得分:8)

修改

正如here所指出的非交互式shell ..


 # If not running interactively, don't do anything
[ -z "$PS1" ] && return
 # execution returns after this line

现在,对于bashrc文件中的每个别名,我都说:


alias ll="ls -l"
alias cls="clear;ls" 

创建一个以该别名命名的文件,例如:ll:

user@host$ vi ssh_aliases/ll
#inside ll,write
ls -l
user@host$ chmod a+x ll

现在编辑.bashrc以包含:


 # If not running interactively, don't do anything
[ -z "$PS1" ] && export $PATH=$PATH:~/ssh_aliases

这样做的工作......虽然我不确定这是否是最佳方式 修改(2)
您只需要为别名执行此操作,bashrc中的其他命令将按照David的指示执行“您必须具有ssh的可执行文件才能运行命令”。

答案 3 :(得分:-1)

将在所有脚本中显示的别名的替代方法是 导出&amp; EXECUTE VARIABLE

# shortcut to set enviroment to insensitive case
export go_I="shopt -s nocasematch"

现在在任何脚本中都可以使用

#!/bin/bash $go_I # go Insensitive [[ a == A ]] # evaluates TRUE ( $? == 0) $go_C # maibe want to go back to casesensitive

将所有快捷方式/别名放在 / path / to / my_commands 中并编辑 /etc/bash.bashrc

非常有用

source /path/to/my_commands

答案 4 :(得分:-3)

打开文件〜/ .bash_profile。如果此文件不存在,请在主目录中创建一个并添加以下行

source = $ HOME / .bashrc

退出你的ssh并登录agian,你应该让.bashrc设置为你工作。