将 ruby​​ 脚本转换为 bash 脚本

将 ruby​​ 脚本转换为 bash 脚本

我需要将这个 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

相关内容