写点什么

Bash 的 4 种运行模式

用户头像
Megatron7
关注
发布于: 2020 年 05 月 06 日
Bash 的4种运行模式

1.在日常使用 bash 的过程中,老是会遇见通过 ssh 连接到服务器产生环境变量不可用。命令不存在,是不是让人有点懊恼。

2.还有就是在登录 Armbian 的时候会有串数据提示,但是在切换用户后并没有这种提示。是如何做到的呢?


上面的问题都是由 bash 的运行模式的不同带来的现象。


4 种模是由 2 种状态的交叉组合而成。interactive 和 non-interactive, login shell 和 non-shell


interactiv 的意思是当前的 shell 是交互式, 输入命令。窗口(标准输出)返回结果

login shell 就是用户登录到机器获得的 shell


检测是否是交互式: $- == i # 如果返回结果中包含'i',则是交互式


检测是否登录:shopt -q login_shell # 如果为真则为登录


查看加载的配置文件顺序可以通过输出当前文件名来排查。


1.interactive + login shell (即交互式登录


进入该模式的操作:


1.常规账号密码登录


2.ssh xxx@123.123.123.123


加载的配置文件及顺序:

/etc/profile/root/.bashprofile # bashrc是在bashprofile里加进去的/root/.bashrc/etc/bashrc
复制代码


2.non-interactive + login shell (即非交互式登录


进入该模式的操作:


1.bash -l xxx.sh


加载配置文件及顺序:

无法验证,同为 login shell。加载顺序与第一种一致


3.interactive + non-login shell (即交互式非登录


进入该模式的操作:


1.read -p


2.ssh -t xxx@123.123.123.123 "python"


3.交互式命令


加载配置文件及顺序:

/root/.bashrc/etc/bashrc
复制代码


4.non-interactive + non-login shell (即非交互式非登录


进入该模式的操作:


1.bash xxx.sh


2.ssh xxx@123.123.123.123 "uptime"


加载配置文件及顺序:

/root/.bashrc/etc/bashrc
复制代码


Tips:


1.这里的执行顺序可能没有严格按 POSIX 的标准列出,介绍的是排查这个现象的思路。可能具体到某个平台或某个 shell 又不一样。


2.可以通过上面的内容联想到运维工具 Ansible 就是在这个特性上建立起来的


3.通过这个可以实现登录式套娃。例:宿主机-》跳板机-》目标机,

ssh -t root@123.123.123.123 "ssh root@10.19.1.125"
复制代码

4.无需登录目标机器,利用上面的环境和本地的数据进行计算。

ssh root@123.123.123.123 "python process.py" < 2020income.csv >> 2020income.excel
复制代码


当然这里面还可以玩出更多的花样,有知道的小伙伴可以分享出来哟。




"欢迎关注我的公众号「编程感悟」,一起交流讨论"


发布于: 2020 年 05 月 06 日阅读数: 57
用户头像

Megatron7

关注

预见更多的人,听更多的故事 2018.01.05 加入

分享编程中的趣事,欢迎关注我的公号:vm-321

评论

发布
暂无评论
Bash 的4种运行模式