使用 dmenu 定义变量

using dmenu to define variables

我正在尝试编写一个简单的脚本来剪切一段音频文件,将其设置为图像并将其渲染为视频。 我想使用 dmenu 作为显示输入变量提示的简洁方式。 一切正常,除了 dmenu 似乎希望通过管道将某些内容输入其中,否则脚本将无法运行。

这是我如何让代码的相关部分当前有效

INPUT=$(ls | dmenu -i -p "Input file:")
START=$(echo " " | dmenu -i -p "Start time:")
DURATION=$(echo " " | dmenu -i -p "Duration:")
IMAGE=$(ls | dmenu -i -p "Image file:")

我想删除 $START 和 $DURATION 的 echo 命令,既因为它很难看(它在 dmenu 中留下了一个不需要的 space 彩色框),也因为它看起来多余。但是,如果没有它,脚本会在这些行上失败。

dmenu 是否总是期望通过管道输入某些内容? 也许我做的其他事情完全错了,这只是我的第 3 个 shell 脚本。

要去除彩色空间,您可以这样做:

DURATION=$(:| dmenu -i -p "Duration:")

DURATION=$(dmenu -i -p "Duration:"< <(:))

: 表示 true。所以它和写一样:

DURATION=$(true| dmenu -i -p "Duration:")
DURATION=$(dmenu -i -p "Duration:"< <(true))

但您也可以使用 -n 标志来回显相同的结果:

DURATION=$(echo -n ''|dmenu -i -p "Duration:")
DURATION=$(dmenu -i -p "Duration:"< <(echo -n ''))

来自手册页:

... which reads a list of newline-separated items from stdin

所以是的,dmenu 需要通过管道传输内容。