Linux环境变量,打开的 shell 选项 himBHs 和 hBc

前言全局说明

Linux环境变量 himBHs 和 hBc


一、说明

$- 记录的是当前配置打开的 shell 选项,而 himBH 是其默认值。


二、查看环境变量

2.1 本地执行

echo $-

image


2.1 查看远程环境变量

ssh qt@127.0.0.1 'echo $-'

image

127.0.0.1实际是本机回环,但是假设是远程机器的IP,效果是一样的


三、选项说明

h - hashall
i - interactive-comments
m - monitor
B - braceexpand
H - history
s - 暂未知
c - 暂未知

查看来确认打开状态

set -o | grep -w on

3.1、h - hashall

bash 的 hash 功能,可以实现让某些 command 和 具体路径 绑定在一起。

## 绑定 date 到 /tmp/fakedate 路径
$ hash -p /tmp/fakedate date

## 列出包含 fakedate 绑定关系
$ hash -l | grep  fakedate
builtin hash -p /tmp/fakedate date

## 执行绑定后的 date
$ date
-bash: /tmp/fakedate: No such file or directory

## 取消绑定,date 就是默认的输出日期了
$ set +h
$ date
Sun Jan 19 15:43:18 CST 2020

## 绑定 路径和date
$ set -h
$ date
-bash: /tmp/fakedate: No such file or directory

## 
$ hash -d date
$ date
Sun Jan 19 15:43:53 CST 2020

$ 开头的是用户输入的命令

hash表概述

在 Linux 系统第一次执行外部命令时,hash 缓存表是空的;
这时,系统会先从 PATH 路径下寻找命令,找到后会将路径加入到 Hash 缓存中;

当再次执行此命令时,会直接从 hash 表的路径下执行;
如果存在则直接执行,如果不存在将继续从 PATH 下的路径查找;

因此,hash 表可以提高命令的调用速率。

完整说明:https://blog.csdn.net/weixin_42599558/article/details/116871719


3.2、i - interactive-comments

配置在交互 shell 模式下,是否允许注释。
设置值不能用 set -i ,会报错

## 取消设置,不允许注释
$ set +o interactive-comments
$ echo $-
hmBH
## 显示一个注释语句,被当成命令
$ #testcomment
-bash: #testcomment: command not found

## 设置,允许注释
$ set -o interactive-comments
$ echo $-
himBH
$ set -o | grep -w on | grep interactive-comments
interactive-comments	on
## 显示一个注释语句,不被执行,什么也不显示
$ #testcomment


3.3、m - monitor mode

打开监控模式,配置是否打开控制 Job control 功能。

Job control 是什么? 即可以控制进程的停止、继续,后台或者前台执行等。

开启 job control 后,如果执行了一个比较耗时的命令,可以按下 CTRL+Z 让它在后台运行:

$ sleep 50
^Z
[1]+  Stopped                 sleep 50

然后, 可以用 fg 命令将后台运行的任务恢复到前台执行:

$  fg
sleep 50
^C

如果关闭这个选项,就会失去控制 Job 的能力:

$ set  +m
$ echo $-
hiBH

$ sleep 50
^Z
^Z
^C

$ fg
-bash: fg: no job control

3.4、B - braceexpand

关于括号使用的flag,打开后可以快捷地实现某些效果

快捷输出多个字符串:

$ echo testbraceexpand{1..10}
testbraceexpand1 testbraceexpand2 testbraceexpand3 testbraceexpand4 testbraceexpand5 testbraceexpand6 testbraceexpand7 testbraceexpand8 testbraceexpand9 testbraceexpand10

$ set +B
$ echo $-
himH

$ echo testbraceexpand{1..10}
testbraceexpand{1..10}

快捷备份:

$ echo $-
himH
$ cp  /tmp/myfile{,.bak}
cp: missing destination file operand after '/tmp/myfile{,.bak}'
Try 'cp --help' for more information.

$ set -B
$ echo $-
himBH
$ cp  /tmp/myfile{,.bak}
$ ls -l  /tmp/myfile*
-rw-r--r-- 1 xxx users 3 Jan 19 16:43 myfile
-rw-r--r-- 1 xxx users 3 Jan 19 16:43 myfile.bak

3.5、H - history

是否允許用 “感叹号 !+ history number ” 来执行历史命令

!! : 返回并执行最近的一个历史命令
!n : 返回并执行第 n 个历史命令

$ echo $-
himBH

$ uptime
 16:51:00 up 1137 days, 23:01,  1 user,  load average: 0.29, 0.38, 0.31
$ !!
uptime
 16:51:05 up 1137 days, 23:02,  1 user,  load average: 0.35, 0.39, 0.31

$ history | grep 59
   59  01/19/20 16:47 echo $-

$ !59
echo $-
himBH

如果关掉 histexpand ,那么 !n 则无法顺利执行了。

$ set +H
$  echo $-
himB
$ !59
-bash: !59: command not found
$ !!
-bash: !!: command not found

由于 histexpand 打开的时候,“ !” 带特殊含义;
因此 histexpand 打开状态下,“ !” 不能出现在双引号中,
否则会报错 -bash: !": event not found ,具体可戳 《 Linux -bash: !": event not found 》 了解。


3.6、s - 暂未知


3.7、c - 暂未知



四、其他知识

4.1 set 命令

查看: set -o
设置: set -N 或者 set -o Nx
取消: set +N

4.2 -/+ 作用

-:设置值
+:取消设置值



免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://blog.csdn.net/weixin_44648216/article/details/104062992
https://blog.csdn.net/weixin_44648216/article/details/104059516
https://blog.csdn.net/Jerry00713/article/details/134160949
https://blog.csdn.net/Jerry00713/article/details/134161018?spm=1001.2014.3001.5502



posted @ 2024-04-09 12:22  悟透  阅读(203)  评论(0编辑  收藏  举报