问题标签 [bash-trap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - SIGINT 上的 BASH 中断 readline
我尝试在套接字上的读取循环中捕获 SIGINT ctrl+c,但我要求的中断仅在换行后得到处理。因此,当我 ctrl+c 我正在运行的应用程序时,我必须在循环中断/应用程序退出之前等待新行到达套接字
这是最小版本:
如何立即打破循环并退出应用程序?
bash - 如何计算刚刚在 Bash 中执行的命令中使用的字符数?
假设我想打印一行,以便在执行命令后填充终端中剩余的空间。它可能看起来像这样:
我有一些功能可以在终端上打印一行。这些最终使用有关终端尺寸的信息来执行此操作。功能如下:
有一种方法可以在执行指定命令之前立即执行命令。该命令(此处date
以示例为例)可以指定如下:
因此,这将在每次使用回车时执行指定命令之前运行。
我如何计算刚刚执行的命令中使用的字符数,以便结合所有这些技巧以允许一行填充命令之后的剩余部分?
bash - 如果脚本出现 shell 错误,则将退出代码传播给调用者,该脚本具有退出陷阱
如果带有 EXIT 陷阱的 Bash 脚本中出现语法错误,是否可以将退出代码传播给调用者?例如,如果我有:
然后,即使脚本没有真正成功结束,运行它也会给出退出代码 0:
但是,如果我注释掉退出陷阱,脚本将返回 1。或者,如果我用返回非零的命令(例如/bin/false
)替换未绑定变量的行,则该退出值会按照我的意愿传播。
linux - cp:找不到命令
我正在尝试将一个文件复制到另一个目录并在调用中断时收到错误消息。
剧本 :
输出 :
你知道这个脚本有什么问题吗?
bash - 将 SIGINT 发送到前台进程有效,但不是后台
我有两个脚本。script1产生script2然后向SIGINT
它发送一个信号。然而,script2中的陷阱似乎不起作用?!
脚本1:
脚本2:
如果更改./script2 &
为./script2
并按下CTRL+C
所有内容,则一切正常。那么我做错了什么?
bash - 为什么陷阱信号在 Shell 函数中不起作用?
这很好用:
但是 /tmp/.log.pipe 在像这样执行时不会被删除:
我想知道为什么以及如何?
这是我的代码。我用它来跟踪远程机器上的日志。
linux - ERR背后的实际信号是什么
我在几个地方(包括 SO)读过-e
被认为是“不良形式”的地方,并且在出现任何错误时退出脚本是不可靠的。处理错误的更好方法似乎是使用trap
,如下所示:
我似乎无法在手册页中找到ERR
实际上是什么信号?我假设它是SIGQUIT
,但我无法确定。
仅具有您期望的正常信号SIGTERM SIGQUIT SIGINT
等。
有对ERR
信号的引用,但似乎没有定义它。
例如:“ A trap on ERR, if set, is executed before the shell exits.
”
类似于man trap
in that is 引用ERR
但没有根据我所看到的来定义它。
捷径背后的实际信号是ERR
什么?(在正常信号中,如 中所示man 7 signal
)。
我更喜欢捕获实际的信号名称而不是速记版本,尽管我意识到它们会产生相同的结果(从脚本中的命令中捕获任何错误然后抛出给处理程序)。
bash - 为什么bash调用者在调试陷阱中打印不同的行号
我正在使用DEBUG 陷阱为 bash 脚本编写自定义调试器。在使用调用者打印堆栈跟踪时,我偶然发现了负行号。
当我在嵌套调用中使用的陷阱方法中调用它时,调用者的输出似乎有所不同。
调试.sh:
测试.sh:
当我调用我的脚本时,bash --rcfile debug.sh -i test.sh
我得到
比较
比较.sh:
我打印没有陷阱的信息bash --rcfile compare.sh -i test.sh
有一个类似的问题,当执行返回非零值的函数时,如何获取原始调用者 lineno既错过了对 bash 行为的解释,也没有解决适用于这种情况的解决方案。
假设 bash 在陷阱中计算错误,我已经尝试通过调查函数定义的位置来重新计算正确的行号,但找不到任何合理的方法。
c++ - 陷阱未能捕获 SIGSEGV
我正在使用这个脚本来测试陷阱:
并且forever.cpp
只运行一个递归函数:
但是它提供Segmentation fault: 11
而不是打印segfault
。我不确定为什么。
bash - 导出函数中的陷阱被静默忽略
此 Bash 脚本按预期运行。
test_this.sh
它打印
但是,当我尝试导出此功能时,它无法捕获。
test_this2.sh
在命令行中获取并运行它:
结果是
陷阱去哪儿了?