首页 > 解决方案 > 使用 dmenu 定义变量

问题描述

我正在尝试编写一个简单的脚本来剪切一段音频文件,将其设置为图像并将其渲染为视频。我想使用 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 中留下了一个不需要的彩色空间),而且它看起来是多余的。但是,如果没有它,脚本会在这些行上失败。

dmenu 是否总是希望将某些内容输入其中?也许我在做其他完全错误的事情,这只是我的第三个 shell 脚本。

标签: bashshelldmenu

解决方案


要摆脱彩色空间,您可以这样做:

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 ''))

从手册页:

...从标准输入读取换行符分隔的项目列表

所以是的,dmenu 需要通过管道传输的东西。


推荐阅读