如何在 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 };
我正在尝试让 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 };