문자열의 다른 줄에서 명령 대체 처리

문자열의 다른 줄에서 명령 대체 처리

줄 바꿈으로 구분된 명령 목록이 포함된 변수가 있습니다 COMMANDS(즉, 이 경우 줄 바꿈이 없다는 것을 알고 있지만 로 구분할 수 있습니다 NUL). 예를 들어,

echo "foo bar"
tail blah.txt
python3 -c 'print(1 + 10)'

나는 이들 각각을 호출하고 싶지만 프로세스 대체를 사용하여 다른 프로그램에 대한 인수로 모두 제공하고 싶습니다. 예제를 계속해서 입력하려면 cat다음 명령을 실행하고 싶습니다.

cat <(echo "foo bar") <(tail blah.txt) <(python3 -c 'print(1 + 10)')

이를 동적으로 수행하는 방법이 있습니까? 내가 생각할 수 있는 가장 좋은 해결책은 이 명령을 문자열로 구성하여 다음 위치에 제공하는 것입니다 bash -c.

bash -c "cat$(echo "$COMMANDS" | while read -r p; do printf ' <(%s)' "$p"; done)"

그러나 이것은 약간 불안정한 느낌이 듭니다(따옴표와 같은 가장자리 입력 사례를 강력하게 처리할 수 있을지 의문입니다).

시험해 보고 싶은 사람을 위해 제가 예로 사용한 것을 설정하는 빠른 명령이 있습니다.

COMMANDS=$(printf 'echo "foo bar"\ntail blah.txt\npython3 -c "print(1 + 10)"')
echo blah > blah.txt

관련 정보