linux基础之信号捕获bash5

电工技术 2年前 (2022) aysz01
0

trap

例如,指南库脚本不会被意外中断,但是某些人在运行该库时会突然或无意中给您Ctrl +C,这就尴尬了。

有没有办法让我们的脚本在碰到ctrl+c时,还能继续执行,或者收到ctrl+c的终止执行的信号时,告诉执行者,此脚本执行时不能被随意中断。

有,bash允许内容对一些信号量捕获,可以在收到信号后执行指定的操作

信号,用kill或者快捷键发给指定的进程,进程收到后安装预设的规则处理,使用kill -l 可以查看系统可用的信号。

信号9,15 不可捕获,这些信号必须由操作系统处理,否则你写个死循环,kill -9 都杀不了,系统就崩了。

常用的快捷键信号

SIGINT,2,ctrl+c

SIGTSTP,18,ctrl+z,暂停

trap 'func "abc"' SIGINT,收到这个信号时,执行指定的代码

trap -- SIGINT,删除信号追踪

脚本示例

#! /bin/bash

trap 'func "abc"' SIGINT

trap "echo Goodbye." EXIT

index=0

func() {

echo 'abc', $1

index=$[index+1]

if [ $index -ge 10 ]; then

trap -- SIGINT

fi

}

eval

执行一个字符串,先把字符串中的变量替换为实际值

pipe="|"; eval ls $pipe wc -l

相当于 sh -c "ls $pipe wc -l"

set ls pwd

eval $1 #第一次扫描到$1为ls,第二次执行ls

exec

执行一个命令,把命令加载到当前的bash环境中执行,把当前bash的数据

所以exec执行后,执行栈会返回到当前bash的上一层,因为当前的bash环境已经被exec替换了

# su - user1

$ exec ls

ls执行完,会返回到root的环境下

time

记录程序执行的时间

还有一个time程序,比bash内置的time功能要多一点,可以用 time ls,明确使用time程序而非bash的命令

umask

设置文件或者目录的权限掩码

在一个目录里设置权限掩码,那么这个目录里面新建的文件的权限规则是,目录:777-umask值,文件,666-umask值

版权声明:aysz01 发表于 2022-08-06 15:45:23。
转载请注明:linux基础之信号捕获bash5 | 电工学习网

暂无评论

暂无评论...