如何将非常小的 bash 脚本转换为单行命令

如何将非常小的 bash 脚本转换为单行命令

我有一个以下 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");

相关内容