서브쉘을 직접 실행하는 방법

서브쉘을 직접 실행하는 방법

나는 이것을 가지고있다:

timeout 25 bash -c '
  for i in {1..9}; do
      if read line < "$my_fifo"; then
          if test "$line" != "0"; then
                   exit 0;
           fi
      fi
  done
'

나는 bash를 정말 좋아하지 않아서 이것을 할 수 없습니다:

timeout 25 (...)

왜 () 자체가 절차로 간주되지 않는지 이해할 수 없습니다. 그냥 익명의 프로그램이군요...어쨌든...

내 목표는 위의 내용을 달성하는 것이지만 bash -c 'xyz'따옴표 등으로 구문 강조를 얻지 못하므로 사용하지 않습니다.

해결책이 있나요?

답변1

Bash의 해결 방법은 함수를 정의하고 내보낸 다음 마지막으로 timeout 25 bash -c함수를 실행하는 데 사용하는 것입니다. 이는 덜 "직접적"이지만 최소한 구문 강조는 작동해야 합니다.

솔직히 timeout별도의 프로그램이라 '직접' 할 수 있는 방법은 없는 것 같아요. timeout 25 (...)Bash가 자체적으로 구현 timeout하고 이를 키워드로 만드는 경우(좋다time; time (...)일하다).

아래 예에서는 $my_fifo환경을 에 배치했습니다 timeout. 원본 코드 $my_fifo도 환경에 있어야 합니다.

#!/bin/bash
my_func() {
  for i in {1..9}; do
      if read line < "$my_fifo"; then
          if test "$line" != "0"; then
                   exit 0;
           fi
      fi
  done
}
export -f my_func
my_fifo=./fifo timeout 25 bash -c my_func

관련 정보