我需要将这个 ruby 脚本转为适用于 Ubuntu 上的 i3 的 bash:
#!/usr/bin/env ruby
sink = %x`pacmd list-sinks | grep -e 'name:' -e 'index:' -e 'active'`
er = /\* index: ([0-9])/
er.match sink
if $1 == "1"
print 'usb'
else
print 'mic'
end
该脚本必须用于 i3block 并显示在 i3bar 上。作为示例,以下脚本在 i3block 上显示结果,但我不明白它是如何做到的。
#!/bin/bash
BAT=$(acpi -b | grep -E -o '[0-9][0-9]?%')
echo "BAT: $BAT"
exit 0
感谢您的帮助!
答案1
#!/bin/bash
sink=$(pacmd list-sinks | grep '* index:')
if [[ "${sink:11:11}" -eq "1" ]]
then
echo 'usb'
else
echo 'mic'
fi
这是做出了很多假设,因为您没有对粘贴的 ruby 脚本以及实际目标进行太多解释。
此 bash 脚本对 pulseaudo 接收器列表的输出执行 grep,其中索引前面带有 *。然后从此行开始,检查第 11 个字符。如果是 1,则回显 USB,否则回显 MIC。
如上所述,这是假设很多,如果有其他索引在起作用,或者您确实想要设备的名称,这种编程风格可能会出错......
我不知道 i3bar 或 i3blocks,但您可能需要在 i3blocks 中设置一个间隔或将脚本包装在 while 循环中,因为脚本运行、输出某些内容然后退出,所以某些内容应该不断触发它。您执行此操作的方式是 i3 特定的,我对此一无所知。根据手册页,这是我首先尝试的方法
[pulse]
command=/usr/local/bin/check_pulse.sh
interval=15
http://manpages.ubuntu.com/manpages/bionic/man1/i3blocks.1.html