I'm using alsa
to fiddle around with the volume on a Bluetooth speaker I have connected. It's a 1-speaker setup; just something to provide some background.
I can 'get' the volume setting fm the CLI as follows:
$ 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]
I can 'set' the volume fm the CLI as follows:
$ 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]
I don't need all this verbosity, so I decided to create a function, and two aliases in my ~/.bashrc
file to reduce that. The function is not working as I expected:
From the CLI, this works fine:
$ amixer sget Master | awk -F"[][]" '/Right:/ { print $2 }'
35%
But when I put this into my function statement in ~/.bashrc
, it works differently:
# 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'
Re-reading ~/.bashrc
& running the vol-get
function yields the following:
$ . ~/.bashrc
$ vol-get
Front Left: Playback 22938 [35%] [on]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ?? what happened here ??
$ vol-up
Front Left: Playback 26215 [40%] [on]
$
So - I'm close, but I don't understand why my | awk ...
behaves differently inside the function than it does on the command line. Can someone explain and correct this?
Edits for answers to some of the Questions raised in the comments:
EDIT #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
EDIT #2:
RE: non-printing characters; note this is a partial c&p from the output (i.e. verbatim):
$ cat -vet ~/.bashrc
...
function vol-get() {$
amixer sget Master | awk -F'[][]' '/Left:/ { print $2 }'$
}$
...