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

我想通过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命令时是否有其他可能性来获取这个别名? 有一些sshconfiguration需要适应吗?

从bash的手册页:

除非使用shopt设置expand_aliasesshell选项,否则在shell不交互时不会扩展别名

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

 shopt -s expand_aliases 

代替:

 ssh user@host "bash -c ll" 

尝试:

 ssh user@host "bash -ic ll" 

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

编辑:

正如这里指出的非交互式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" 

创build一个名为该别名后面的文件:

用户@主机$ vi ssh_aliases / ll
#inside ll,write ls -l
用户@主机$ chmod a + x ll

现在编辑.bashrc以包含:

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

这样做的工作..虽然我不知道这是否是最好的办法
EDIT(2)
你只需要这样做别名,在bashrc中的其他命令将按照David所指出的执行“你必须有可执行的ssh来运行命令”。

在所有脚本中可以看到别名的替代方法是EXPORTEXECUTE 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

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

源= $ HOME / .bashrc

退出你的SSH和login安捷伦,你应该得到的.bashrc设置为你工作。