作为我正在尝试编写的更大脚本的基础,我正在尝试基本上在bash中实现基本的netcat客户端。我目前的脚本很有用,看起来像这样:
#!/bin/bash
exec 3<>/dev/tcp/$1/$2
cat <&3 &
cat <&1 >3
它的问题在于它留下了一个需要被杀死的挂猫进程,但是我无法想出一个自动的方法,并且手动运行pkill cat
并不是真正的运动。< / p>
答案 0 :(得分:5)
我接受了Jeremy的答案是正确的,但对于任何好奇的人来说,这是我最终的完整剧本:
#!/bin/bash
exec 3<>/dev/tcp/$1/$2
control_c()
{
kill $CAT_PID
exit $?
}
trap control_c SIGINT
cat <&3 &
CAT_PID=$!
cat >&3
答案 1 :(得分:3)
这是一个可怕的kludge,但你可以产生一个子shell,所以像这样:
CAT1_PID=$$
echo CAT1_PID > /tmp/CAT1_PID
exec cat <&3 &
然后,当然,如果正在运行此脚本的多个副本,则会遇到竞争条件。
根据您的shell,您可以在PS列表中调用某种形式的exec和“重命名”cat。那你可以
pkill the_cat_that_ate_the_network