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

加载的配置文件及顺序:

1/etc/profile 2/root/.bash_profile # bashrc是在bash_profile里加进去的 3/root/.bashrc 4/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.交互式命令

加载配置文件及顺序:

1/root/.bashrc 2/etc/bashrc

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

进入该模式的操作:

1.bash xxx.sh

2.ssh xxx@123.123.123.123 "uptime"

加载配置文件及顺序:

1/root/.bashrc 2/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" < 2020_income.csv >> 2020_income.excel

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


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

在这里插入图片描述

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang