아주 작은 bash 스크립트를 한 줄 명령으로 변환하는 방법

아주 작은 bash 스크립트를 한 줄 명령으로 변환하는 방법

C 코드에서 popen(/path/to/script, 'r+')을 사용하여 실행되고 결과를 저장하는 다음 bash 스크립트가 있습니다(예: 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

나는 두 가지 패스를 생각해 냈습니다.

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

관련 정보