如何在 C 代码中使用 shell 运算符,如 `&&` 和 `;`

How to use shell operators like `&&` and `;` in C code

我正在尝试让 DWM window 管理器的状态栏在我更改音量和键盘布局时更新。在网上搜索了一下,找到了键盘切换的方法:

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 };

static const char *alsatoggle[]  = { "amixer", "-q", "set", "Master", "toggle", ";", "pkill", "-HUP", "dwm_bar.sh", NULL };

但是没有任何反应; alsa 音量水平不会改变,当然也不会刷新。我怀疑 bash &&; 没有像在 C 代码中那样传递。

我和埃里克的想法一样。 ;&& 的问题在于它们被 shell 解释。因此,正如埃里克建议的那样,运行 shell.

考虑一下:

static const char *alsatoggle[]  = { "sh", "-c" , "amixer -q set Master toggle && pkill -HUP dwm_bar.sh", NULL };