이 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/sh
POSIX 쉘을 사용하고 싶다고 알리기 위해 shebang을 추가하면 무엇을 고쳐야 할지 알려줄 것입니다.
답변2
다음 사항이 적용되어야 합니다 sh
.
"$@" 2>&1 | while read line ; do echo -e "r2g: $line" ; done
sh 의 동작은 echo -e
다를 수 있습니다(예: 실제로 출력될 수 있음 -e r2g: ...
).