我正在尝试通过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配置需要调整?
答案 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设置为你工作。