首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巴什等价物斗争

巴什等价物斗争
EN

Ask Ubuntu用户
提问于 2022-11-26 17:57:24
回答 1查看 124关注 0票数 2

我这玩意哪里出问题了?

代码语言:javascript
复制
declare current_state=`pacmd list-sources | sed -n 19p`
declare my_target='used by: 0'
echo $current_state = $my_target
if [ '$current_state' = '$my_target' ] ; then
    echo true
    pacmd set-default-sink "alsa_output.pci-0000_0c_00.4.analog-stereo"
    echo true
else
    echo false
    pacmd set-default-sink "alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra2"
    echo false
fi

它总是将option (false)选项输出到终端:

代码语言:javascript
复制
used by: 0 = used by: 0
false
false

我试过if [[ '$current_state' = '$my_target' ]]if [[ '$current_state' == '$my_target' ]]if [ '$current_state' == '$my_target' ]if [ '$current_state' == 'used by 0:' ]if [ '$current_state' = 'used by 0:' ]等等。

对于上下文,我试图使用来自如何用键快捷方式切换声音输出的脚本,但是这些脚本都没有工作,因为我的输出识别码是2、3和30。因为这是有道理的。无论如何,我发现通过运行pacmd列表-源,同时改变手动选择的输出声音设置的差异,在几行。(我最初尝试的是第6行,它会将索引2中的一个(第一个,是,第一个)的状态报告为state: IDLEstate: RUNNINGstate: SUSPENDED。我设法使bash脚本工作一次,从我的耳机到我的显示器,然后不再。因此,我尝试更改这个第19行输出的位置,它告诉我它是否在使用(我认为),在活动时使用used by: 1,在非活动时使用used by: 0,只需切换。但是没有,没有运气。

因此,我开始进行基本的故障排除,以确保if/ get的计算正确,而不是。我不知道我该在这里做什么。我把申报搞砸了吗??我不知道。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2022-11-26 19:02:43

pacmd list-sources通常会产生带前导空格/制表符的行。这可能会导致你所比较的两个字符串不相等.空格数。

您可以使用=~进行部分匹配,例如尝试[ " abc: 1" = "abc: 1" ] && echo "full match" || [[ " abc: 1" =~ "abc: 1" ]] && echo "partial match" ..。请注意=~周围字符串和子字符串的顺序以及[[ ... ]]的使用。

因此,修改代码:

代码语言:javascript
复制
#!/bin/bash

current_state=$(pacmd list-sources | sed -n 19p)
my_target="used by: 0"
echo "$current_state" = "$my_target"
if [[ "$current_state" =~ "$my_target" ]] ; then
    echo true
    pacmd set-default-sink "alsa_output.pci-0000_0c_00.4.analog-stereo"
    echo true
else
    echo false
    pacmd set-default-sink "alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra2"
    echo false
fi
票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1442637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档