gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:15:01 24 4
gpt4 key购买 nike

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

#!/bin/bash
trap "echo trapped" EXIT
exit 0

和测试.sh。如果 test.sh 是这样的

#!/bin/bash
. trap.sh

#!/bin/bash
./trap.sh | :

陷阱工程

但是如果test.sh是这样的

#!/bin/bash
. trap.sh | :

陷阱没有用。

谁知道这是为什么?

最佳答案

我修改了 trap.sh 以包含 xtrace 选项。

#!/bin/bash
set -x
trap 'echo trapped' EXIT
exit 0

运行 trap.sh 作为脚本产生

~ $ ./trap.sh |猫 + trap 'echo trapped' 退出 + 导出 0 + echo 被困 被困

先采购,再生产

~ $ . trap.sh | cat
++ trap 'echo trapped' EXIT
++ exit 0

这表明 trap 在更深的子 shell 中执行(为什么,我不知道),并且陷阱本身从未执行(我在 的第二个实验中确认触摸他捕获的文件而不是仅仅回显,以防标准输出被继承时出现问题;该文件从未被触摸过)。

我的猜测是,根据 trap< 的描述中的这句话,在执行 source 命令之前,以某种方式忽略了 EXIT 信号 手册页中的命令:

Signals ignored upon entry to the shell cannot be trapped or reset.

因此,执行了 trap 命令,但陷阱本身从未注册,因此不会触发。

关于linux - 为什么陷阱在管道中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com