我有一个打印我的笔记本电脑音量的脚本,它确实很复杂而且很慢:
/bin/sh -c \"amixer get Master "
"| tail -n1 "
"| grep -Po '\\[\\K[^%]*' "
"| head -n1\""
在 Unix 中(我假设 Linux 也是如此),一切都是文件。那么保存卷的文件在哪里,所以我可以直接 cat 吗?就像
/sys/class/backlight/acpi_video0/brightness
答案1
已经有一个适用于该目的的工具,并且它在所有 Ubuntu 上都可用。您可以像这样使用命令:
amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }'
对于具有立体声的系统,探测左扬声器。其他选项是“右”和“单声道”,它将以百分比 (100%) 显示音量。只需将该结果放入变量中即可。
修复 guiverc 的评论:
amixer get Master | egrep -o '[0-9]{1,3}%'
将显示所有线条的所有百分比(如果百分比为 1,则为单声道,否则按左、右顺序显示)
要解决“文件”方法:
据我所知,源代码/dev/dsp
是使用读写控制。
#包括 <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);
ioctl() 系统调用可操作特殊文件的底层设备参数。具体来说,字符特殊文件(例如终端)的许多操作特性都可以通过 ioctl() 请求来控制。参数 fd 必须是打开的文件描述符。
第二个参数是与设备相关的请求代码。第三个参数是指向内存的无类型指针。它传统上是 char *argp(来自 void * 成为有效 C 之前的时代),并且在本次讨论中将如此命名。
ioctl() 请求已编码参数是输入参数还是输出参数,以及参数 argp 的大小(以字节为单位)。用于指定 ioctl() 请求的宏和定义位于文件 <sys/ioctl.h> 中。请参阅注释。
但是我的 C 语言知识非常有限 ;)