首页 > 解决方案 > `screen` 的 `stuff` 命令是否使用 `stdin`?

问题描述

mpv是一个媒体播放器,可以从命令行交互使用。这将在终端中启动它:

mpv path/to/playlist_file.m3u --no-audio-display

然后我可以按>转到下一个曲目并使用其他交互式命令

我可以使用screen如下方式控制它:

# start a screen session called "my_player"
screen -d -m -S my_player mpv path/to/playlist_file.m3u --no-audio-display
# next track
screen -S my_player -p 0 -X stuff ">"
# prev track
screen -S my_player -p 0 -X stuff "<"
# "end of text character" = control + c = terminate
screen -S my_player -p 0 -X stuff $'\003'

但是 screen 的stuff命令在这里做什么呢?我会猜到“将输入发送到标准输入”,但echo ">" | mpv path/to/playlist_file.m3u不会导致它启动并立即跳过曲目。

man screen说:

将字符串 string 填充到当前窗口的输入缓冲区中。这类似于“粘贴”命令,但开销要少得多。您不能使用“stuff”命令粘贴大缓冲区。它对键绑定最有用。另见“绑定键”。

“输入缓冲区”是指标准输入还是其他?

(我问是因为我想通过 Elixir 控制这个程序Port,它使用标准输入和输出,但到目前为止我的输入似乎被忽略了。)

标签: shellgnu-screen

解决方案


推荐阅读