我正在编写一个shell脚本,它需要根据特定X11扩展的存在与否,为被调用的程序提供不同的选择。我有一个可行的解决方案,但我希望有一个更清洁的解决方案。我愿意考虑一个简单的c程序来做测试并返回结果。下面是我作为一个最小功能示例所做的工作:
#!/bin/sh
xdpyinfo |sed -nr '/^number of extensions/,/^[^ ]/s/^ *//p' | \
grep -q $EXTENSION && echo present我认为有一种方法可以简化sed,grep,但我真的不喜欢解析xdpyinfo。
发布于 2016-10-18 19:39:23
你也有C标签,所以让我建议你自己做xdpyinfo。下面的C程序只打印扩展:
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int compare(const void *a, const void *b)
{
return strcmp(*(char **) a, *(char **) b);
}
static void print_extension_info(Display * dpy)
{
int n = 0, i;
char **extlist = XListExtensions(dpy, &n);
printf("number of extensions: %d\n", n);
if (extlist) {
qsort(extlist, n, sizeof(char *), compare);
for (i = 0; i < n; i++) {
printf(" %s\n", extlist[i]);
}
}
// TODO: it might not be a good idea to free extlist, check
}
int main()
{
Display *dpy;
char *displayname = NULL;
dpy = XOpenDisplay(displayname);
if (!dpy) {
fprintf(stderr, "Unable to open display \"%s\".\n",
XDisplayName(displayname));
exit(EXIT_FAILURE);
}
print_extension_info(dpy);
XCloseDisplay(dpy);
exit(EXIT_SUCCESS);
}与GCC一起编译
gcc -O3 -g3 -W -Wall -Wextra xdpyinfo1.0.2.c $(pkg-config --cflags --libs x11) -o xdpyinfo1.0.2(应该对未使用的argc发出警告,但这是无害的)
只需将printf()更改为您想要的格式即可。
https://stackoverflow.com/questions/40115567
复制相似问题