나는 이것을 가지고있다:
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