我有一个以下 bash 脚本,它正在使用 C 代码中的 popen(/path/to/script, 'r+') 执行并保存结果(例如:DA00000);为此,我需要导出 bash 脚本文件。
我不应该使用单独的 bash 脚本。
如何在一行中编写以下脚本作为命令?
所以,我可以在 C 代码中直接使用这个命令(例如:fp = popen(command "r"))。
#!/bin/sh
url="$(grep 0x017a /sys/bus/pci/devices/*/device)"
addr="$(echo $url | cut -d/ -f6)"
str="$(head -n1 /sys/bus/pci/devices/$addr/resource | cut -d ' ' -f 1)"
result="${str:${#str} - 8}"
echo $result
答案1
我想出了两个通行证:
第一部分(网址+地址)
awk -F/ '/0x017a/ {print $6}' /sys/bus/pci/devices/*/device
第二部分
awk 'NR==1 { print substr($1,1,length($1)-8;}' /sys/bus/pci/devices/$addr/resource
我不确定这是解决问题的好方法。
答案2
您可以将脚本转换为 C 字符串,然后将该字符串直接传递给函数popen(3)
。
请注意,它popen(3)
采用一个脚本,该脚本将作为参数传递给sh -c
(并且可以包含任何有效的 shell 命令),而不仅仅是程序名称或命令行。
例子:
$ perl -e '
print qq{char *script =\n};
while(<>){
s/([\0-\x1f"\\\x7f-\xff])/sprintf "\\x%02x",ord$1/ge;
print qq{\t"$_"\n}
}
print qq{;\n}
' script.sh > script.h
$ cat script.h
char *script =
...
然后在你的C
文件中:
#include script.h
...
FILE *fh = popen(script, "r");