프로그램은 다음 형식으로 데이터를 출력합니다.
n=4607356
null_cells=5668556
cells=10275912
min=0.0433306089835241
max=0.53108499199152
range=0.487754383007996
mean=0.40320252333736
mean_of_abs=0.40320252333736
stddev=0.0456556814489487
variance=0.00208444124856788
coeff_var=11.3232628285782
sum=1857697.565113524
first_quartile=0.378443
median=0.410276
third_quartile=0.435232
percentile_90=0.457641
이러한 변수 중 일부를 bash로 구문 분석하여 스크립트에서 사용할 수 있도록 하고 싶습니다. 예를 들면 다음과 같습니다.
$n = 4607356
$median = 0.410276
잠깐만요, 모든 것이 한 번에 완료되었습니다.
어떻게 해야 하나요?
답변1
가장 쉬운 방법은 출력을 파일로 리디렉션한 다음 해당 파일을 가져오는 것입니다.
스크립트에서는 다음과 같습니다.
#!/bin/sh
program > tmp_file
. tmp_file
rm tmp_file
echo $any_var_you_need
bash
임시 파일 없이 이 작업을 수행 할 수 있습니다 .
#!/bin/bash
source <(program)
echo $any_var_you_need
유일한 이론적 보안 허점은 프로그램이 무언가를 손상시키는 위험한 코드를 출력할 수 있다는 것입니다.
출력 에 변수만 포함되어 있는지 확인하여 이를 program
방지 할 수 있습니다.sed
program | sed '/^\s*[a-zA-Z_.][_a-zA-Z0-9]*=[a-zA-Z0-9_-+.,]*/!d;s/ .*//;'
변수로 보이지 않는 문자열을 제거합니다(원하는 대로 편집 가능).
답변2
@rush가 언급한 것과 동일한 보안 경고를 사용하여 간단히 eval
명령에 추가할 수 있습니다. 물론 두 경우 모두 잘못된 bash 구문으로 인해 오류가 발생합니다(무시해도 됩니다).
예:
$ echo 'a=1
> b=2
> c=1234'
a=1
b=2
c=1234
$ echo $b
$ eval echo 'a=1
b=2
c=1234'
a=1
$ echo $b
2