Bash 在子脚本发出特定字符串时杀死它

Bash 在子脚本发出特定字符串时杀死它,bash,process,terminal,kill,Bash,Process,Terminal,Kill,我有以下设置: #!/bin/bash # call.sh voip_binary $1 现在,当我看到某个事件发生时(当我挂断电话时),那么voip\u二进制文件就会发出一个特定的字符串:。。。[断开连接]… 但是,脚本不会停止,而是继续运行。现在,只要在输出中发现disconnectd,我就想终止脚本 因此,我可以执行以下操作,以获得相关输出: voip_binary $1 | grep DISCONNCTD 尽管我现在只从二进制文件中获得相关输出,但我仍然不知道如何在发出一行代码后立

我有以下设置:

#!/bin/bash
# call.sh

voip_binary $1
现在,当我看到某个事件发生时(当我挂断电话时),那么
voip\u二进制文件就会发出一个特定的字符串:
。。。[断开连接]…
但是,脚本不会停止,而是继续运行。现在,只要在输出中发现
disconnectd
,我就想终止脚本

因此,我可以执行以下操作,以获得相关输出:

voip_binary $1 | grep DISCONNCTD
尽管我现在只从二进制文件中获得相关输出,但我仍然不知道如何在发出一行代码后立即终止它。

您可以尝试以下方法:

voip_binary $1 | grep 'DISCONNCTD' | while read line; do
    pkill 'voip_binary'
done
假设
voip\u binary
不带缓冲地输出字符串

您可以尝试以下方法:

voip_binary $1 | grep 'DISCONNCTD' | while read line; do
    pkill 'voip_binary'
done


假设
voip\u binary
不带缓冲地输出字符串

您是否使用陷阱(有时陷阱也有帮助?)。如果是,当您看到返回的值为discnctd时,您可以将其标记为xx,并使用-15或-9信号将其杀死。@ArunSangal,我的知识有限,
SIG xx
意义不大。如果你提供了一个有效的答案,我会很高兴地接受它。参见:kill-l,它将列出用户可以发送的所有信号(包括名称和编号)。例如:kill-912345(杀死一个PID为12345的进程)。您是否使用陷阱(有时陷阱也有帮助?)。如果是,当您看到返回的值为discnctd时,您可以将其标记为xx,并使用-15或-9信号将其杀死。@ArunSangal,我的知识有限,
SIG xx
意义不大。如果你提供了一个有效的答案,我会很高兴地接受它。参见:kill-l,它将列出用户可以发送的所有信号(包括名称和编号)。例如:kill-912345(杀死一个PID为12345的进程)。您是否使用陷阱(有时陷阱也有帮助?)。如果是,当您看到返回的值为discnctd时,您可以将其标记为xx,并使用-15或-9信号将其杀死。@ArunSangal,我的知识有限,
SIG xx
意义不大。如果你提供了一个有效的答案,我会很高兴地接受它。参见:kill-l,它将列出用户可以发送的所有信号(包括名称和编号)。例如:kill-912345(杀死一个PID为12345的进程)。我们不应该使用“直到”而不是while吗?我看到它在无限循环中运行,while(直到我们通过voip_binary接收到所需的discnctd字符串)@ArunSangal当voip_binary不再产生输出时,循环将停止。这是因为
read
将在EOF时返回false。实际上,当该行包含
disconnectd
时,我想退出。有没有办法强制退出
voip\u二进制文件
,因为我想确保它退出。这似乎会停止循环,但不会停止脚本,因为调用正在进行,即使我提前中止脚本stage@Besi编辑了答案。不过,系统中应该只有一个
voip\u binary
的实例,否则每个实例都将被杀死。我们不应该使用“直到”而不是while吗?我看到它在无限循环中运行,while(直到我们通过voip_binary接收到所需的discnctd字符串)@ArunSangal当voip_binary不再产生输出时,循环将停止。这是因为
read
将在EOF时返回false。实际上,当该行包含
disconnectd
时,我想退出。有没有办法强制退出
voip\u二进制文件
,因为我想确保它退出。这似乎会停止循环,但不会停止脚本,因为调用正在进行,即使我提前中止脚本stage@Besi编辑了答案。不过,系统中应该只有一个
voip\u binary
的实例,否则每个实例都将被杀死。我们不应该使用“直到”而不是while吗?我看到它在无限循环中运行,while(直到我们通过voip_binary接收到所需的discnctd字符串)@ArunSangal当voip_binary不再产生输出时,循环将停止。这是因为
read
将在EOF时返回false。实际上,当该行包含
disconnectd
时,我想退出。有没有办法强制退出
voip\u二进制文件
,因为我想确保它退出。这似乎会停止循环,但不会停止脚本,因为调用正在进行,即使我提前中止脚本stage@Besi编辑了答案。不过,系统中应该只有一个
voip\u binary
实例,否则每个实例都将被杀死。