如何在启动过程后10秒内将bash发送到stdin?

时间:2016-06-03 13:42:45

标签: linux bash

我想做的是:

  • 运行流程
  • 等待10秒
  • 将字符串发送到流程的标准输入

这应该在bash脚本中完成。

我试过了:

./script&
pid=$!
sleep 10
echo $string > /proc/${pid}/fd/0

它在shell中有效,但在脚本中运行时却没有。

2 个答案:

答案 0 :(得分:4)

( sleep 10; echo "how you doin?" ) | ./script

您的方法可能适用于Linux,例如,您的脚本stdin就像是一个FIFO:

myscript(){ tr a-z A-Z; }
rm -f p
mkfifo p
exec 3<>p
myscript <&3 &
pid=$!
echo :waiting
sleep 0.5
echo :writing
file /proc/$pid/fd/0
echo hi > /proc/$pid/fd/0
exec 3>&-

但是这个/proc/$pid/fd内容在不同的Unices上表现不同。

它不适用于您的情况,因为您的脚本stdin是终端。 使用默认的终端设置,终端驱动程序会将尝试从中读取的后台进程暂停(通过向它们发送SIGTTIN信号)并写入终端文件描述符只会得到回显 - 它们不会唤醒睡眠的后台进程我试着从终端上读书。

答案 1 :(得分:1)

这个怎么样(因为OP要求在脚本中完成):

{
    "proxy":"http://xxx.xxx.xxx.xxx:80"
}

只是提出缺少的元素而不是评论编码风格; - )