BASH 休眠并向程序发送击键

BASH Sleep & Send Keystroke to Program

问题:在终端中启动 Adaptec Utility 并使第二个硬盘驱动器指示灯闪烁。休眠并提交击键以结束闪烁。

> arcconf identify 1 device 0 1
Controllers found: 1
The specified device is blinking.
Press any key to stop the blinking.

命令:arcconf identify 1 device 0 1

以下是我尝试过的一些命令。

1.) echo -ne '\n' | arcconf identify 1 device 0 1

结果:启动程序并立即提交 'enter'。该实用程序在驱动器闪烁之前停止;我不知道如何在这里添加睡眠。

2.) kill -9 8309

结果:终止 arcconf 进程,但是,即使进程终止,驱动器也将永远闪烁。

3.) echo -ne '\n' > /proc/8309/fd/0

结果:向进程发送一个 'enter',但是,这只会将新行打印到终端 运行 arcconf,并且不会实际提交击键。 echo "abcd".

结果相同

如何在 bash 中启动此实用程序、睡眠并发送按键以停止该实用程序?

假设您想休眠 5 秒,请尝试 bash 进程替换

arcconf identify 1 device 0 1 < <(sleep 5; echo)

另一个更精确的选择是使用

expect <<'END'
spawn arcconf identify 1 device 0 1
expect "Press any key to stop the blinking"
send "\r"
expect eof
END

使用shell语句分组:

{ printf '\n'; sleep 5; } | arcconf identify 1 device 0 1

程序标准输入的管道将保持打开状态,直到睡眠结束。