Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用shell操作符,如`&&;`和`在C代码中_C_Bash_Dwm - Fatal编程技术网

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

如何使用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

我试图使DWM窗口管理器的状态栏在我更改音频音量和键盘布局时更新。搜索网络后,我找到了一种切换键盘的方法:

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