问题标签 [shell-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 投票
3 回答
2539 浏览

shell - 捕获 shell 退出代码

我正在编写一个 shell 脚本,并且想要处理我可能遇到的各种退出代码。为了尝试一下,我正在使用这个脚本:

我想我错过了一些东西,但似乎我无法捕获自己的“出口 1”。如果我尝试捕获 0 一切都会解决:

关于捕获 HUP (1) 退出代码有什么我应该知道的吗?

0 投票
2 回答
2708 浏览

signals - ksh 中的自定义陷阱信号

有没有办法让我在 ksh 中实现自定义假信号?目前正在捕获 ERR 信号并退出。但是,由于更改,有些调用可能不会返回成功,但这是一个有效条件。在这种情况下,我想确保此调用生成不同的信号或以不同的方式处理 ERR。有没有办法做到这一点?

0 投票
1 回答
1348 浏览

shell - 结束时间戳未在 Shell 脚本上打印:使用陷阱

我有一个用于部署的 shell 脚本。因为我想捕获整个过程的输出,所以我将它包装在一个子外壳中并将其拖尾:

在我使用 subshel​​l 之前,该trap命令有效。当您按下CNTL-C时,程序将打印Stopping Script:日期和日期。

但是,我想确保没有人忘记保存这个脚本的输出,所以我使用了 subshel​​l 来自动保存输出。而且,现在trap似乎不起作用。

我究竟做错了什么?


新的信息

多玩一点。我现在看到问题不在于外壳或子外壳。这该死的管子!

如果我不将输出通过管道传输到tee,则trap工作正常。如果我将输出通过管道传输到tee,则trap不起作用。

所以,真正的问题是我如何打开输出并且仍然能够使用trap


测试程序

在您回答之前,请尝试以下测试程序:

顶部的管道连接到somefile..... 最下面的没有。最下面的,陷阱有效。最重要的是,陷阱没有。看看你是否可以让管道工作并且“脚本被杀死”行打印到 teed out 文件中。

管道确实有效。陷阱没有,但只有当我有管道时。您可以将trap语句四处移动并放入一层又一层的子壳。我做的一些小事情是错误的,我不知道它是什么。

0 投票
2 回答
824 浏览

shell - 在循环中退出 ksh 的惯用方式

我有以下 5 秒计时器,它每秒打印一个星号。

不知何故,陷阱块似乎有点骇人听闻,我想知道是否有更正确的方法来中断整个循环(不仅仅是当前的睡眠周期)。我试过了:

在函数内部和外部的不同位置,但正如我之前提到的,这只会中断当前的睡眠周期。

0 投票
2 回答
763 浏览

bash - 在没有临时文件的情况下恢复陷阱

不带参数trap打印所有陷阱的当前设置命令。但是,子 shell 不继承陷阱,因此保存和恢复陷阱的规范示例在 bash 中失败:

分配的 RHS 上的陷阱在子 shell 中运行,因此 save_traps 始终是空字符串。除了将输出写入trap临时文件之外,脚本如何找到陷阱的当前命令集?

0 投票
1 回答
4697 浏览

bash - 为什么这个简单的 bash 陷阱会失败

我对 bash 脚本还是很陌生,我很难弄清楚为什么这个简单的陷阱没有按预期工作。

目标- 创建一个可以通过按CTRL+跳过的可选等待期C

CTRL+C - 的预期结果立即回显“没有时间打盹!” 并退出。

CTRL+C - 的实际结果立即回显“小睡时间结束”。并退出。

为什么我的陷阱函数没有被调用?

0 投票
2 回答
827 浏览

bash - JBoss 初始化脚本 - 捕获问题

我有一个用于启动/停止/等 JBoss AS (v7.1.1) 的脚本。我在 SUSE Enterprise 11 上运行,所以提供的 initscript 不起作用。我的脚本遇到的问题是清理函数永远不会被调用。

0 投票
1 回答
800 浏览

signals - 在 Bourne shell 中同时观察信号和进程退出

我有一个想要监视另一个程序的 Bourne shell (/bin/sh) 脚本(用于可移植性)。它应该启动另一个程序,然后等待它退出。当第二个程序退出时,它会做一些最后的工作并自行退出。问题是脚本还需要响应信号(例如 USR2)并在这些信号出现时做一些工作。

我天真的实现是:

这行不通。如果我发送 shell SIGUSR2,陷阱会按预期触发,但等待也会结束,返回 140。 /bin/sleep 继续其愉快的方式。典型输出:

这种行为在 dash 和 bash 之间是一致的,我可以方便地访问这两个 Bourne shell 衍生物。

我目前的工作是旋转循环等待子 PID 消失,用 kill 进行探测。自旋循环似乎很浪费,并且如果 PID 被快速重用,我的脚本可能会错误地等待错误进程的窗口扩大。

考虑到我的目标是同时等待另一个进程退出并能够响应信号,是否有更好的解决方案?

0 投票
3 回答
1040 浏览

bash - 陷阱火灾后退出

拿这个脚本

我想fd触发一次,无论是从 Control-C 还是脚本正常退出。但是,如果您按 Control-C,它将运行两次。我怎样才能解决这个问题?

0 投票
1 回答
445 浏览

linux - shell脚本终止程序但不是脚本本身

我正在使用 shell 脚本自动搜索网络接入点,在 airodump 中,您使用 ctrl + c 停止搜索,我希望它取消搜索但保持我的 shell 脚本运行。因为我想在搜索完 wifi 网络后进行用户输入。我尝试使用陷阱,它停止了 airodump 和我的脚本。

我只是想停止 airodump wifi 搜索并转到我的用户输入 shell 脚本。