sh 호환 bash 함수를 만드는 방법

sh 호환 bash 함수를 만드는 방법

이 bash 기능이 있습니다.

zmx(){
 "$@"  \
      2> >( while read line; do echo -e "r2g: $line"; done ) \
      1> >( while read line; do echo -e "r2g: $line"; done )
}

이 함수는 bash로만 가져오고 실행해야 하지만, 어떤 신의 축복으로 인해 sh로 가져오고 실행됩니다.

위의 기능을 다음과 같이 사용할 수 있습니다.

zmx foo bar

r2g:foo 명령의 stdout/stderr 앞에 추가됩니다 .

그래서 내 질문은 - 위의 bash 기능을 sh가 사용할 수 있는 것으로 변환하는 방법을 아는 사람이 있습니까?

이제 sh가 함수를 해석할 때 구문 오류가 발생합니다. 나는 이 함수를 해석하기 위해 왜 sh가 호출되는지 알아내려고 몇 달 동안 노력해 왔지만 sh가 그렇게 하는 것을 막으려는 시도를 거의 포기했습니다.

답변1

POSIX에서 작동하는 또 다른 접근 방식은 다음과 같습니다 sh.

zmx() {
    "$@" 2>&1 | sed 's/^/r2g: /'
}

이렇게 하면 read미묘한 처리를 방지할 수 있습니다.

이러한 쉘 조각을 직접 확인하려면 다음을 사용할 수 있습니다.주택 검사: #!/bin/shPOSIX 쉘을 사용하고 싶다고 알리기 위해 shebang을 추가하면 무엇을 고쳐야 할지 알려줄 것입니다.

답변2

다음 사항이 적용되어야 합니다 sh.

"$@" 2>&1 | while read line ; do echo -e "r2g: $line" ; done

sh 의 동작은 echo -e다를 수 있습니다(예: 실제로 출력될 수 있음 -e r2g: ...).

관련 정보