grep 결과에서 줄을 실행하는 방법은 무엇입니까?

grep 결과에서 줄을 실행하는 방법은 무엇입니까?

일부 설치 지침이 포함된 텍스트 파일이 있고, 파일에서 고유한 항목을 찾기 위해 grep을 사용할 수 있다는 것을 알고 있습니다. 예를 들어 텍스트 파일의 내용은 다음과 같습니다.

MYDIR=`/home/user -name somedir 찾기`
내보내기PERL5LIB=$PERL5LIB:$MYDIR

bash에서 파일의 grep 다음 줄을 실행하는 방법은 무엇입니까? 그것은 다음과 같습니다:

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

답변1

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

grep somedir INSTALLFILE | sh

실행 중인 셸 프로세스 내에서 행을 평가하려면 다음을 수행하세요.

eval "$(grep somedir INSTALLFILE)"

답변2

가정:

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

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

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
)

답변3

다음과 같이 find의 "exec" 기능을 사용해 보셨나요?

find somedir -name INSTALLFILE -exec {}\;

관련 정보