从无限输入流中的while循环中,参数列表中的错误太长

时间:2019-07-18 01:45:23

标签: linux bash

我有一个打印我的音量状态的脚本。它检查pactl subscribe的输出以确定何时发生了更改。目前,我正在使用while循环来执行此操作,并且在脚本运行了一段时间后(我可以通过按住一个键将静音切换大约一分钟来快速复制),唯一的输出是“ / usr / bin / grep:参数列表太长”

我尝试使用< <(pactl subscribe),将其传递到while循环中,并且还从fifo中读取。这些都不起作用。这是预期的吗?如果是这样,处理打印无限输出的类似pactl subscribe之类的方法是什么?由于第一个错误提到了ponymix,所以我认为这可能是一个问题,但是使用pamixer不能解决任何问题。

完整脚本为here。以下是相关摘录:

while read -r event; do
    if echo "$event" | grep --quiet --invert-match --ignore-case "client"; then
        print_volume
    fi
done < <(pactl subscribe)

我希望没有错误。第一个错误是line 36: /usr/bin/ponymix: Argument list too long。第二个错误是line 36: /usr/bin/grep: Argument list too long。然后,所有输出为line 88: /usr/bin/grep: Argument list too long

编辑:这与通过将长参数列表传递给某些对象而导致的建议重复项不同。我没有在该示例中使用通配符。

1 个答案:

答案 0 :(得分:0)

问题在于,在print_volume函数内部,我反复寻找其中包含export的文件。正如查尔斯·达菲(Charles Duffy)指出的那样,这导致环境规模过大。