我写了下面的脚本:
#!/bin/bash
sleep 15
function_signalr()
{
date
date | awk '{printf "%-15s\n", $2}'
}
trap "function_signalr" 10
Run Code Online (Sandbox Code Playgroud)
当我通过“进程&”启动进程时,将给出PID。我确实杀死了-10 PID,但是我的陷阱不起作用。该进程被杀死,但陷阱没有弹出。没有给出日期消息。如有任何建议,我将不胜感激。
我想捕获输入来控制屏幕截图功能。
vim myscreenshot.sh
screenshot(){
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0+0,0 /tmp/out.mp4
}
close(){
echo "screenshot is over"
exit
}
trap 'screenshot' ctrl+a #how to fix it?
trap 'close' ctrl+b #how to fix it?
Run Code Online (Sandbox Code Playgroud)
该命令trap 'screenshot' SIGINT可以捕获ctrl+c.
我的需求:输入ctrl+a启动截图功能,ctrl+b停止截图功能bash myscreenshot.sh &,后台运行后退出。
我试图检测我的菜单何时调整大小trap "echo resized" SIGWINCH,但它似乎没有检测到它。我目前使用的是 ubuntu 20.04,并且我正在使用 bash 脚本来执行此操作。trap 命令位于我的脚本的顶部。为什么不执行?
使用trap可能有助于编写最干净的bash脚本.但是我想知道是否存在解决方案以便在以下情况下捕获错误:
GNU bash,版本4.2.45
好的
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
案例KO
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand && echo "miss the trap"
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
&&使整个句子不是ERR.我有这个:
trap on_ql_trap EXIT;
trap on_ql_trap INT;
trap on_ql_trap TERM;
echo "pid that called trap: $$"
Run Code Online (Sandbox Code Playgroud)
这可能可以变成速记:
trap on_ql_trap EXIT INT TERM;
echo "pid that called trap: $$"
Run Code Online (Sandbox Code Playgroud)
当我杀死调用陷阱的进程/pid 时,使用
kill <pid>
Run Code Online (Sandbox Code Playgroud)
或者
kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,什么也不会发生。这个过程继续存在。在使用 -9 的第二种情况下,进程终止,但不会调用陷阱。所以这两个 kill 命令都没有做我想要的!我希望进程退出,但我需要先调用陷阱。有谁知道为什么会这样?