我用它alsa
来调整我连接的蓝牙扬声器的音量。这是一个单扬声器设置;只是为了提供一些背景信息。
我可以通过 CLI 来“获取”音量设置,如下所示:
$ amixer sget Master
Simple mixer control 'Master',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 65536
Mono:
Front Left: Playback 22938 [35%] [on]
Front Right: Playback 22938 [35%] [on]
我可以通过 CLI 来“设置”音量,如下所示:
$ amixer sset Master 50%
Simple mixer control 'Master',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 65536
Mono:
Front Left: Playback 32768 [50%] [on]
Front Right: Playback 32768 [50%] [on]
我不需要这么冗长的内容,所以我决定在文件中创建一个函数和两个别名~/.bashrc
来减少它。该函数没有按我预期的方式工作:
从 CLI 来看,这可以正常工作:
$ amixer sget Master | awk -F"[][]" '/Right:/ { print $2 }'
35%
但是当我将其放入我的函数语句中时~/.bashrc
,它的工作方式有所不同:
# functions & aliases for alsa mixer/volume control
function vol-get() {
amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }'
}
export -f vol-get
alias vol-up='amixer sset Master 5%+ > /dev/null && vol-get'
alias vol-dn='amixer sset Master 5%- > /dev/null && vol-get'
重新读取~/.bashrc
并运行该vol-get
函数得到以下结果:
$ . ~/.bashrc
$ vol-get
Front Left: Playback 22938 [35%] [on]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ?? what happened here ??
$ vol-up
Front Left: Playback 26215 [40%] [on]
$
所以 - 我很接近了,但我不明白为什么我| awk ...
在函数内部的行为与在命令行上的行为不同。有人可以解释并纠正这个问题吗?
对评论中提出的一些问题的答案进行编辑:
编辑#1:
$ command -V vol-get
vol-get is a function
vol-get ()
{
amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }'
}
$ awk --version
awk: not an option: --version
$ man awk
# reveals that I am actually calling `mawk`, Version 1.3.4
编辑#2:
RE:非打印字符;请注意,这是输出的部分 c&p(即逐字):
$ cat -vet ~/.bashrc
...
function vol-get() {$
amixer sget Master | awk -F'[][]' '/Left:/ { print $2 }'$
}$
...
这只回答了一半,因为我不确定根本原因:
在函数定义中,替换
和
修复了 OP 的问题,仅报告值
50%
。我无法通过自己的 WSL 框重现此问题,因为它适用于这两种变体。这是意料之中的,因为根据 bash手册:
没有提到
[]
那里。