我试图通过ssh远程执行命令,例如:
ssh@
需要执行的命令是别名,在.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配置需要调整?
从bash的手册页:
除非使用
expand_aliases
shell设置shell ,否则当shell不是交互式时,别名不会展开shopt
有几种方法可以做到这一点,但最简单的方法是将以下行添加到您的.bashrc
文件中:
shopt -s expand_aliases
代替:
ssh user@host "bash -c ll"
尝试:
ssh user@host "bash -ic ll"
强制bash使用"交互式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运行命令".