grep 결과에서 나오는 줄을 실행하는 방법?


10

특정 설치 지침이 포함 된 텍스트 파일이 있으며 파일에서 고유 한 항목을 grep 할 수 있다는 것을 알고 있습니다. 예를 들어, 텍스트 파일은 다음과 같습니다.

MYDIR =`찾기 / home / user-이름 somedir`
수출 PERL5LIB = $ PERL5LIB : $ MYDIR

bash에서 파일에서 grep 후 행을 어떻게 실행할 수 있습니까? 다음과 같은 것 :

"grep somedir INSTALLFILE"의 결과 실행
"grep 'export PERL5LIB'INSTALLFILE"의 결과 실행

2
이 방식으로 자동 실행하는 것이 조금 위험하지 않습니까?
— Faheem Mitha 2016 년

2
@Faheem and @avilella : 십대 이상, 오히려 위험합니다! 또한 약간 깨지기 쉽습니다.
— Caleb

답변:


4

가정 :

  • 이 파일을 제어 할 수 있으며 악성 코드의 위험이 없습니다
  • 이 변수를 현재 쉘로 설정하려고합니다

명령을 임시 파일로 리디렉션하고 다음을 실행할 수 있습니다.

tmp=$(mktemp)
{
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
} > "$tmp"
. "$tmp"

또는 결과를 평가할 수 있습니다

eval "$(grep somedir INSTALLFILE)"
eval "$(grep 'export PERL5LIB' INSTALLFILE)"

오래된 답변을 업데이트합니다. 내가 오늘 할 일은 프로세스 대체를 사용하는 것입니다.

source <(
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
)

의 source <(...)경우 bash 4 이상이 필요합니다. 이전 버전에서는 작동하지 않았습니다 (zsh는 괜찮 았습니다).
— Stéphane Chazelas

11

별도의 쉘 프로세스에서 행을 평가하려면 다음을 수행하십시오.

grep somedir INSTALLFILE | sh

실행중인 쉘 프로세스에서 행을 평가하려면 다음을 수행하십시오.

eval "$(grep somedir INSTALLFILE)"

나무를 통해 숲을 볼 수있는 유일한 사람은 +1입니다. 이로써 내 답변을 삭제합니다. @avilella : 편의를 위해 당신은 사용할 수 있습니다 -A 1또는 -B 1하나에 플래그 또는 다른로 grep의 그 @Gilles 솔루션 중 하나 그렙 및 사용에 두 줄을 가져.
— Caleb

일부 시스템 sh에서는 예상 한 것 대신 다른 쉘에 대한 심볼릭 링크 일 수 있으므로 결과를 예측할 수 없습니다. 안전을 위해, 당신이 기대하는 정확한 껍질을 구체적으로 명시하십시오.grep somedir INSTALLFILE | bash
— thdoan

-2

다음과 같이 find의 'exec'기능 사용을 고려 했습니까?

find somedir -name INSTALLFILE -exec {}\;

OP가 찾기에서 나오는 모든 결과를 실행하는 것이 아니라 grom grep으로 돌아 오는 결과를 실행하려고한다고 생각합니다.
— Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.