如何使用shell操作符,如`&&;`和`在C代码中
我试图使DWM窗口管理器的状态栏在我更改音频音量和键盘布局时更新。搜索网络后,我找到了一种切换键盘的方法:如何使用shell操作符,如`&&;`和`在C代码中,c,bash,dwm,C,Bash,Dwm,我试图使DWM窗口管理器的状态栏在我更改音频音量和键盘布局时更新。搜索网络后,我找到了一种切换键盘的方法: static const char *kblayoutnext[] = { "pkill", "-HUP", "dwm_bar.sh", NULL }; 当我按键切换布局时,使用pkill和HUP信号,状态栏被重新加载,显示新的设置 对于音频,这适用于更改音量: static const char *alsatoggle[] = { "amixer", "-q", "set", "M
static const char *kblayoutnext[] = { "pkill", "-HUP", "dwm_bar.sh", NULL };
当我按键切换布局时,使用pkill和HUP信号,状态栏被重新加载,显示新的设置
对于音频,这适用于更改音量:
static const char *alsatoggle[] = { "amixer", "-q", "set", "Master", "toggle", NULL };
但状态栏上没有刷新
所以我试着
static const char *alsatoggle[] = { "amixer", "-q", "set", "Master", "toggle", "&&", "pkill", "-HUP", "dwm_bar.sh", NULL };
及
但是什么也没有发生;alsa音量水平不会改变,当然也不会刷新。我怀疑bash&&和在C代码中没有像应该的那样被传递。我和Eric有相同的想法。
的问题
和&&
是由shell解释的。因此,正如Eric所建议的,运行shell
考虑这一点:
static const char *alsatoggle[] = { "sh", "-c" , "amixer -q set Master toggle && pkill -HUP dwm_bar.sh", NULL };
仅将字符串放入数组对其他任何内容都没有影响。假设您正在将这些数组传递给影响终端、窗口管理器、shell或其他软件的某个API。在这方面,您需要显示、说明或解释您正在使用这些阵列做什么。从外观上看,它们可以用作执行单个程序的
exec
例程系列中某些程序的参数。exec
例程不像shell那样解析命令。要获取shell功能,您可以使用-c
开关执行bash
,而不是直接执行命令,以解析作为字符串传递的命令。关于您的问题,您正在询问如何在编程语言B中使用编程语言A中的功能X。这没有什么意义。相反,想想X做了什么,然后研究一下如何在B中实现类似的功能。我还尝试使用一个可执行的shell脚本。alsatoggle.sh脚本是amixer-q set Master toggle&&pkill-HUP dwm_bar.sh
和C代码中的行:static const char*alsatoggle[]={“alsatoggle.sh”,NULL}代码>它可以工作,我不知道哪个更有效(可执行脚本或sh-c)
static const char *alsatoggle[] = { "sh", "-c" , "amixer -q set Master toggle && pkill -HUP dwm_bar.sh", NULL };