非常に小さなbashスクリプトを1行のコマンドに変換する方法

非常に小さなbashスクリプトを1行のコマンドに変換する方法

Cコードでは、popen(/ path / to / script、 'r +')を使用して実行され、結果を保存する次のbashスクリプトがあります(例:DA00000)。これを行うには、bashスクリプトファイルをエクスポートする必要があります。

別のbashスクリプトを使用しないでください。

次のスクリプトを1行のコマンドでどのように記述できますか?

したがって、このコマンドは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

私は2つのパスを思い出しました。

パート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(有効なシェルコマンドを含むことができる)スクリプトを使用することに注意してください。

例:

$ 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");

関連情報