问题标签 [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.

0 投票
2 回答
1722 浏览

bash - bash 陷阱不会忽略信号

请考虑这个 bash 脚本:

正如预期的那样,尝试使用 ctrl-c 中断睡眠失败。但是 rsync 是可中断的(睡眠和 rsync 的顺序无关紧要)?欢迎任何想法!

编辑:发现不同之处:rsync 本身启动 2 个子进程(客户端/服务器,我假设它产生 2 个错误消息),这些似乎没有继承其父级的“无知”。必须深入研究 bash 源代码并了解陷阱的工作原理......

0 投票
3 回答
323 浏览

bash - 如何继续重新启动 Windows cmd 提示符

Cygwin 的 bash 通常比 Windows 的 cmd 命令 shell 更可取,因此我们在生成 Windows shell 之前使用它来设置我们的环境。但是,在这个生成的 shell 中使用Ctrl-C终止正在运行的进程会导致用户返回 bash shell。

我尝试的解决方法:

这种方法只重新启动 cmd 一次。随后的 Ctrl-C 不会被捕获。有没有办法继续重启 cmd 进程?

0 投票
2 回答
1159 浏览

linux - 用于保护文件免受 Alt + f4 影响的陷阱命令

我想知道Trap命令是否用于保护文件免受SIGKILL (ALT+ F4)信号的影响。如果是,那么以下命令会这样做吗?

我正在尝试中止所有试图关闭的信号left.py

0 投票
1 回答
2802 浏览

arrays - 保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

什么是覆盖bash不会永久践踏可能已设置或尚未设置的现有陷阱处理程序的好方法?那么动态管理任意的陷阱例程链呢?

有没有办法保存陷阱处理程序的当前状态,以便以后可以恢复它们?

0 投票
1 回答
443 浏览

bash - bash shell:control-c 可以导致 shell 写入一个空文件吗?

我有一个 bash shell 脚本。它写入一个文本文件。如果我在命令级别使用 control-c 停止脚本,它的大部分工作都会找到。有时写入的文件例如

最终会是空的。因此,当我点击 control-c 停止运行 shell 脚本时,它可能会在它打开文件写入的实例中被捕获,并且在将任何内容放入其中之前,它没有机会并离开它空的?

如果是这样的话。我可以在 bash shell 脚本中做什么,以便它在写入文件后和有机会再次写入文件之前优雅地退出,因为它是在 while 循环中执行此操作的。谢谢!

0 投票
2 回答
554 浏览

bash - 即使我有一个应该阻止它的陷阱 INT,我的交互式 bash 脚本循环也会中断?

在这个简单的脚本上

如果我按 ctrl+c 它将退出循环

如果我让它不与第一行交互#!/bin/bash,它会起作用!

问题是我有几个脚本(使用存储在的“启动应用程序”运行~/.config/autostart)只能在启用交互性的情况下正常工作#!/bin/bash -i,主要是因为它们加载了选项.bashrc授予的再次-i

有小费吗?

编辑:我在请求我的~/.bashrc文件时发现了这个:

这可以防止将该文件作为非交互式脚本中的源加载,我没有把它放在那里,我不知道它为什么在那里......

编辑:所以,由于问题是加载设置在的内容~/.bashrc,但脚本的行为并不奇怪,我发现由存储在的“启动应用程序”启动的脚本~/.config/autostart可能会以这种方式运行:

所以脚本不会有-i选项,只会从#!/bin/bash正常运行开始,并且~/.bashrc文件也会正确设置环境。

0 投票
1 回答
1685 浏览

linux - 防止 bash 脚本在处​​理 SIGINT 后终止

我正在为应用程序编写一个 bash 包装器。该包装器负责更改用户、运行软件并记录其输出。我还希望它传播 SIGINT 信号。

到目前为止,这是我的代码:

我的问题是,当我向这个包装器发送一个 SIGINT 时,handle_int会被调用,但是脚本结束了,而我希望它继续等待$SU_PID.

有没有办法捕捉 int 信号,做一些事情然后阻止脚本终止?

0 投票
1 回答
1552 浏览

bash - bash 中的陷阱语法问题

如果发生故障,我打算使用陷阱执行一些清理代码。我有以下代码,但似乎有一些语法问题。

有没有人看到陷阱的编写方式有问题。如果出现错误,陷阱确实可以正常执行,但它还会在下面抛出另一个不需要的错误消息。

如何正确编写以避免错误消息?另外,如果我必须将参数 $LOOP_DEV1 和 $LOOP_DEV2 从主脚本发送到陷阱然后发送到 handle_error 函数怎么办?现在它们在主脚本中作为环境变量导出。我搜索了一些陷阱示例,但找不到类似的东西。

编辑

我将 shebang 从 /bin/sh 更改为 /bin/bash。由于 /bin/sh 已经与 bash 符号链接,我没想到会有独角兽,也没有看到任何独角兽。

0 投票
3 回答
176 浏览

linux - 为什么陷阱在管道中不起作用

在这个脚本中我们有一个脚本 trap.sh

和test.sh。如果 test.sh 像

或者

陷阱工程

但是如果 test.sh 就像

陷阱没有用。

有人知道这是为什么吗?

0 投票
1 回答
402 浏览

bash - 在子 bash 进程中更改父级的陷阱处理程序

我有一个 bash 函数,它被 bash 脚本作为子进程(虽然是反引号)调用。有没有办法让这个函数(在子进程中运行)修改父的陷阱处理程序?此函数创建一个临时文件,我希望在父级退出时对其进行清理。举个例子

然后,在调用脚本中,我有类似的东西:

一旦这个脚本退出,我想$roe_dir被删除(使用 EXIT 陷阱)。关于实现这一目标的干净方法的任何想法?

我无法向get_roe_dir()函数添加 EXIT 陷阱,因为它在子 shell 中执行以捕获输出。因此,一旦get_roe_dir()返回,子shell 就退出并调用 EXIT 陷阱,删除它创建的临时目录。