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_aliases
shell选项,否则在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来运行命令”。
在所有脚本中可以看到别名的替代方法是EXPORT & 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
打开文件〜/ .bash_profile。 如果此文件不存在,请在主目录中创build一个文件并添加下面的行
源= $ HOME / .bashrc
退出你的SSH和login安捷伦,你应该得到的.bashrc设置为你工作。