问题描述
本来之前在树莓派上配置了几个Alias指令(如本例中sdroff),快速控制几个Service的开关。用的时候可以先ssh到树莓派上,然后输入指令回车,再登出。最近在计算机上试图直接在ssh后面跟着要执行的指令来简化流程,所以直接执行 ssh rasp sdroff ,但发现不能正常工作:“sdroff: command not found”。
查找资料
我的Alias是在~/.bashrc文件中定义的,查阅资料之后发现,用户目录下的配置文件有几种:
.bashrc, .profile, .bash_profile等
其中,.profile对交互式Shell和非交互式Shell都起作用;
.bashrc只对交互式Shell起作用,如果是非交互式Shell(ssh后直接跟指令的方式),则其中的指令一般不会生效。
.bash_profile一般作为bash下.profile的替代文件。当.bash_profile或.bash_login存在的情况下,.profile文件不会bash被读取。
实验结果
为了确定这几个文件之间的关系,在树莓派这几个文件中打log,进行了实验。结果如下:
.bashrc文件的开头: 判断是否交互式的语句登陆交互式SSH时,bash尝试读取顺序是: /etc/profile 及 (~/.bash_profile| ~/.bash_login| ~/.profile)之一。不过一般在profile中都会引入~/.bashrc。
当登陆非交互式SSH时,bash尝试读取的是: ~/.bashrc。
一般在.bashrc中,会有一个判断语句来判断当前是交互式Shell还是非交互式Shell。若为非交互式Shell,则直接跳过后续指令,不做任何事情。
总结
本实验结果仅在树莓派下的bash做了测试,其他系统及其他Shell可能不适用。在MacOS系统是一个例外,它的bash以.bash_profile来代替.bashrc文件(未验证),另外新版本MacOS还预装了zsh这个神器,它的配置文件也有区别。
关键词
树莓派 bash 读取 顺序 .bashrc .profile
网友评论