问题标签 [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 - bash 陷阱不会忽略信号
请考虑这个 bash 脚本:
正如预期的那样,尝试使用 ctrl-c 中断睡眠失败。但是 rsync 是可中断的(睡眠和 rsync 的顺序无关紧要)?欢迎任何想法!
编辑:发现不同之处:rsync 本身启动 2 个子进程(客户端/服务器,我假设它产生 2 个错误消息),这些似乎没有继承其父级的“无知”。必须深入研究 bash 源代码并了解陷阱的工作原理......
bash - 如何继续重新启动 Windows cmd 提示符
Cygwin 的 bash 通常比 Windows 的 cmd 命令 shell 更可取,因此我们在生成 Windows shell 之前使用它来设置我们的环境。但是,在这个生成的 shell 中使用Ctrl-C终止正在运行的进程会导致用户返回 bash shell。
我尝试的解决方法:
这种方法只重新启动 cmd 一次。随后的 Ctrl-C 不会被捕获。有没有办法继续重启 cmd 进程?
linux - 用于保护文件免受 Alt + f4 影响的陷阱命令
我想知道Trap命令是否用于保护文件免受SIGKILL (ALT+ F4)信号的影响。如果是,那么以下命令会这样做吗?
我正在尝试中止所有试图关闭的信号left.py
。
arrays - 保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?
什么是覆盖bash
不会永久践踏可能已设置或尚未设置的现有陷阱处理程序的好方法?那么动态管理任意的陷阱例程链呢?
有没有办法保存陷阱处理程序的当前状态,以便以后可以恢复它们?
bash - bash shell:control-c 可以导致 shell 写入一个空文件吗?
我有一个 bash shell 脚本。它写入一个文本文件。如果我在命令级别使用 control-c 停止脚本,它的大部分工作都会找到。有时写入的文件例如
最终会是空的。因此,当我点击 control-c 停止运行 shell 脚本时,它可能会在它打开文件写入的实例中被捕获,并且在将任何内容放入其中之前,它没有机会并离开它空的?
如果是这样的话。我可以在 bash shell 脚本中做什么,以便它在写入文件后和有机会再次写入文件之前优雅地退出,因为它是在 while 循环中执行此操作的。谢谢!
bash - 即使我有一个应该阻止它的陷阱 INT,我的交互式 bash 脚本循环也会中断?
在这个简单的脚本上
如果我按 ctrl+c 它将退出循环
如果我让它不与第一行交互#!/bin/bash
,它会起作用!
问题是我有几个脚本(使用存储在的“启动应用程序”运行~/.config/autostart
)只能在启用交互性的情况下正常工作#!/bin/bash -i
,主要是因为它们加载了选项.bashrc
授予的再次-i
。
有小费吗?
编辑:我在请求我的~/.bashrc
文件时发现了这个:
这可以防止将该文件作为非交互式脚本中的源加载,我没有把它放在那里,我不知道它为什么在那里......
编辑:所以,由于问题是加载设置在的内容~/.bashrc
,但脚本的行为并不奇怪,我发现由存储在的“启动应用程序”启动的脚本~/.config/autostart
可能会以这种方式运行:
所以脚本不会有-i
选项,只会从#!/bin/bash
正常运行开始,并且~/.bashrc
文件也会正确设置环境。
linux - 防止 bash 脚本在处理 SIGINT 后终止
我正在为应用程序编写一个 bash 包装器。该包装器负责更改用户、运行软件并记录其输出。我还希望它传播 SIGINT 信号。
到目前为止,这是我的代码:
我的问题是,当我向这个包装器发送一个 SIGINT 时,handle_int
会被调用,但是脚本结束了,而我希望它继续等待$SU_PID
.
有没有办法捕捉 int 信号,做一些事情然后阻止脚本终止?
bash - bash 中的陷阱语法问题
如果发生故障,我打算使用陷阱执行一些清理代码。我有以下代码,但似乎有一些语法问题。
有没有人看到陷阱的编写方式有问题。如果出现错误,陷阱确实可以正常执行,但它还会在下面抛出另一个不需要的错误消息。
如何正确编写以避免错误消息?另外,如果我必须将参数 $LOOP_DEV1 和 $LOOP_DEV2 从主脚本发送到陷阱然后发送到 handle_error 函数怎么办?现在它们在主脚本中作为环境变量导出。我搜索了一些陷阱示例,但找不到类似的东西。
编辑
我将 shebang 从 /bin/sh 更改为 /bin/bash。由于 /bin/sh 已经与 bash 符号链接,我没想到会有独角兽,也没有看到任何独角兽。
linux - 为什么陷阱在管道中不起作用
在这个脚本中我们有一个脚本 trap.sh
和test.sh。如果 test.sh 像
或者
陷阱工程
但是如果 test.sh 就像
陷阱没有用。
有人知道这是为什么吗?
bash - 在子 bash 进程中更改父级的陷阱处理程序
我有一个 bash 函数,它被 bash 脚本作为子进程(虽然是反引号)调用。有没有办法让这个函数(在子进程中运行)修改父的陷阱处理程序?此函数创建一个临时文件,我希望在父级退出时对其进行清理。举个例子
然后,在调用脚本中,我有类似的东西:
一旦这个脚本退出,我想$roe_dir
被删除(使用 EXIT 陷阱)。关于实现这一目标的干净方法的任何想法?
我无法向get_roe_dir()
函数添加 EXIT 陷阱,因为它在子 shell 中执行以捕获输出。因此,一旦get_roe_dir()
返回,子shell 就退出并调用 EXIT 陷阱,删除它创建的临时目录。