Bash是否支持一种;触发“;事件?

Bash是否支持一种;触发“;事件?,bash,triggers,Bash,Triggers,我有两个bahs脚本同时运行,它们通过将触发器变量保存在文件夹中相互通信。因此,一个脚本将执行某些操作,完成后将回显“done”>variablefolder。第二个脚本有一个循环,不时检查变量文件夹中是否有“done”。如果是,脚本将执行某些操作 Bash支持更好的方法吗?我知道export name=value,但实际上与我现在所做的差不多。我在想,有没有办法将信息推送到一个Bash脚本上,让它做出反应?因此,当有东西被推送到它上面时,Bash脚本将运行一个函数或其他什么?处理进程间通信的一

我有两个bahs脚本同时运行,它们通过将触发器变量保存在文件夹中相互通信。因此,一个脚本将执行某些操作,完成后将回显“done”>variablefolder。第二个脚本有一个循环,不时检查变量文件夹中是否有“done”。如果是,脚本将执行某些操作


Bash支持更好的方法吗?我知道export name=value,但实际上与我现在所做的差不多。我在想,有没有办法将信息推送到一个Bash脚本上,让它做出反应?因此,当有东西被推送到它上面时,Bash脚本将运行一个函数或其他什么?

处理进程间通信的一种方法是使用信号

要向另一个进程发送信号,可以使用kill命令。 kill命令使用进程id来标识进程。 可以在脚本启动后使用
$$
变量将进程id保存到文件中

下面是捕获信号的脚本示例:

#!/bin/bash
echo $$ > /tmp/pid  # Save the pid

function do_stuff {
   echo "I am doing stuff"
   exit
}

trap do_stuff SIGINT

while `true`
do
   echo "Waiting for a signal"
   sleep 1
done
因此,要向其发送信号,您可以执行以下操作:

#!/bin/bash
pid=`cat /tmp/pid`  # Read the pid
kill -s INT $pid

@谢谢你。我现在在Bash中看到了谷歌的信号,这可能就是我要寻找的。我想我应该对监听脚本使用SIGINT,但是如何从另一个脚本发送信号让监听脚本捕获呢?只需使用kill命令!非常感谢你。那么kill实际上不仅仅用于杀死(即终止)程序?我在kill-s上做了一个简短的谷歌搜索,它发送了一个没有“终止”信号的信号,对吗?是的,这是正确的。其思想是,如果您的程序表现良好,它将捕获信号并干净地关闭。如果失败,您可以发送程序无法捕获的
-9
信号,并被操作系统终止。很多程序也使用信号来重新加载配置文件。我一直在玩sigint和trap,但不管怎样,一旦它运行了函数“do_stuff”,它就会终止脚本。有没有办法让它在运行完函数后继续运行?所以从来没有真正被终止过?当然,只要删除我已经做过的写着退出的那行,但是当它完成函数时,它似乎被卡住了。我有一个以“do while:”开头的循环,我希望是无限的。它里面有一个paus,以“while
true
”开头。每次“暂停循环”捕捉信号时,我都希望它运行该函数。然后返回无限循环。但它似乎也打破了无限循环。我是不是遗漏了什么?