当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《ssh命令执行不考虑.bashrc|.bash_login|的.ssh/RC?》经验,为你挑选了3个好方法。

我试图通过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配置需要调整?



1> Joey Mazzare..:

从bash的手册页:

除非使用expand_aliasesshell设置shell ,否则当shell不是交互式时,别名不会展开shopt

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

shopt -s expand_aliases


哦好的.如果您不想在目标计算机上更改环境,还可以尝试其他一些事项:`ssh user @ host"bash -ic ll"`通过运行"交互式"命令为我工作,手册页还讨论了用'-O`标志来设置shopt选项以进行bash.

2> 小智..:

代替:

ssh user@host "bash -c ll"

尝试:

ssh user@host "bash -ic ll"

强制bash使用"交互式shell".


对我来说,我不得不使用`ssh user @ host"bash -lc ll"` - 而不是i.(利马代替印度.)

3> sud03r..:

编辑:

正如这里指出的非交互式外壳..

 # 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运行命令".

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有