标签: trap

陷阱命令中的信号 0 是什么?

我正在遵循有关如何使用 ssh-agent 设置无密码 SSH 身份验证的指南。

要启动 ssh-agent,作者建议在 中使用以下代码.bash_profile:

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会捕获信号 0。根据man 7 signal没有这样的信号。

这只是一个错字或错误,还是真的有什么成就?

bash signals trap

15
推荐指数
1
解决办法
2万
查看次数

如何在 bash 函数中设置陷阱?

我可以trap在 bash 脚本中进行设置,但不能在 bash 函数中进行设置。

比如source下面的代码并运行f,现在试试Ctrl+ C,没有被困住!

如何trap在bash函数中设置?

  4 trap ctrl_c INT
  5 
  6 ctrl_c () {
  7  echo "** Trapped CTRL-C"
  8 }
  9 
 10 
 11 f () {
 12   for i in `seq 1 100`; do
 13     sleep 1
 14     echo -n "."
 15   done
 16 } 
Run Code Online (Sandbox Code Playgroud)

bash trap

14
推荐指数
2
解决办法
1万
查看次数

shell 脚本中的陷阱处理和隐式子 shell

假设您有一个 shell 脚本,它通过EXIT陷阱运行某种清理代码,如下所示:

#!/bin/bash

mytrap () {
  echo "It's a trap!" >&2
}

trap mytrap exit

echo I am at the end of the script.
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这将It's a trap!在脚本退出时打印出来:

$ sh myscript
I am at the end of the script.
It's a trap!
Run Code Online (Sandbox Code Playgroud)

您修改脚本以添加一个函数,该函数生成一些最终通过管道传输到另一个命令的输出,如下所示:

#!/bin/bash

mytrap () {
  echo "It's a trap!" >&2
}

myfunc () {
  echo "I've got a bad feeling about this..."
}

trap mytrap exit

myfunc | cat > /dev/null

echo I am …
Run Code Online (Sandbox Code Playgroud)

shell trap

14
推荐指数
1
解决办法
3463
查看次数

如何在 bash 中捕获返回 139(分段错误)的程序?

我有一个 bash 脚本来测试一些程序,其中一个程序返回,Segmentation fault所以我试图在我的脚本的头部添加一个陷阱:

trap "echo 'segfault occured!'" SIGSEGV
Run Code Online (Sandbox Code Playgroud)

然而这并没有起到任何作用。我用了

echo $?
Run Code Online (Sandbox Code Playgroud)

就在产生段错误的程序之后,我得到139作为输出。如何为该特定错误代码添加陷阱?

bash signals segmentation-fault trap

12
推荐指数
2
解决办法
3万
查看次数

防止 SIGINT 传播到父进程

考虑到父程序(可以是 C++ 程序或 Shell 脚本)执行子 Shell 脚本的场景,当我们在执行子 Shell 脚本时点击 Control+C(或任何配置为 INTR 字符的字符), SIGINT 被发送到前台进程组中的所有进程。这包括父进程。

来源:POSIX.1-2008 XBD 第 11.1.9 节

有没有办法覆盖这个默认行为?CHILD 进程单独处理信号而不将其传播给父进程?

参考:堆栈溢出帖子 - 子进程中断时父进程未完成(TRAP INT)

ksh signals aix shell-script trap

11
推荐指数
2
解决办法
7832
查看次数

在 Ctrl+C 上,终止当前命令但继续执行脚本

我有一个 bash 脚本,其中我执行一行,睡眠一段时间然后tail -f我的日志文件来验证某个模式被看到,我按 ctrl + c 退出tail -f然后移动到下一行,直到 bash 脚本完成执行:

这是我迄今为止所做的:

#!/bin/bash


# capture the hostname
host_name=`hostname -f`


# method that runs tail -f on log_file.log and looks for pattern and passes control to next line on 'ctrl+c'

echo "==================================================="
echo "On $host_name: running some command"
some command here

echo "On $host_name: sleeping for 5s"
sleep 5

# Look for: "pattern" in log_file.log
# trap 'continue' SIGINT
trap 'continue' SIGINT
echo "On $host_name: post update …
Run Code Online (Sandbox Code Playgroud)

shell bash signals trap

11
推荐指数
1
解决办法
1万
查看次数

捕获 'Ctrl + c' 用于 bash 脚本,但不适用于此脚本中打开的进程

我试图在 bash 脚本中有一个交互式程序:

my_program
Run Code Online (Sandbox Code Playgroud)

我希望能够用 'Ctrl + c' 关闭它。但是当我这样做时,我的脚本也正在关闭。

我知道。

trap '' 2
my_program
trap 2
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我无法my_program用 Ctrl + c关闭。

您知道如何在程序上允许 Ctrl + c ,但不关闭运行它的脚本吗?

编辑:添加示例

#!/bin/bash
my_program
my_program2
Run Code Online (Sandbox Code Playgroud)

如果我使用 Ctrl + c 关闭my_program,my_program2则永远不会执行,因为整个脚本已退出。

bash trap

11
推荐指数
2
解决办法
2357
查看次数

Bash:两次发出陷阱

如果我trap两次发出内置命令 [对于相同的信号],会发生什么?第二个命令是添加到第一个命令中,还是替换第一个命令?

trap Foo SIGINT
...
trap Bar SIGINT
...
Run Code Online (Sandbox Code Playgroud)

当 SIGINT 发生时,Bash 是直接运行Bar还是同时运行Foo?或者是其他东西...?

shell bash trap

9
推荐指数
2
解决办法
4240
查看次数

在 dash vs ksh 和 bash 中退出陷阱

这是一个简单的脚本,它在当前目录中设置一个临时目录,并在退出时设置一个陷阱以将其删除。

#filename: script   
set -x  
trap 'rm -rf "$d"' exit
d=`TMPDIR=$PWD mktemp -d`
"$@"
Run Code Online (Sandbox Code Playgroud)

如果我执行ksh script sleep 100或bash script sleep 100中断它C-C,则执行陷阱并删除目录。它不适用于dash. 为什么?这是错误还是预期行为?

bash ksh dash trap

9
推荐指数
1
解决办法
4789
查看次数

awk 脚本中的陷阱 Ctrl-C

我相信Ctrl-C可以被困在 bash 脚本中。是否也可以将其捕获在 awk 脚本中以处理该事件?

例如,对于中止处理,但打印已经处理过的结果,而不是只是默默地退出?

awk shell-script trap

8
推荐指数
1
解决办法
1423
查看次数

标签 统计

trap ×10

bash ×7

signals ×4

shell ×3

ksh ×2

shell-script ×2

aix ×1

awk ×1

dash ×1

segmentation-fault ×1