다음과 같은 bash 기능이 있습니다.
listen_to_thing(){
cat /tmp/srv-output | while read line; do
echo "catted: $line"
if [[ "$line" == 'EOF' ]]; then
exit 0; ## I want to exit out of the function upon this event
fi
done;
}
키워드를 받으면 cat 프로세스를 종료하고 bash 기능을 완료하고 싶습니다. 명령줄에서 SIGINT를 사용하여 bash 기능을 종료할 수 있지만 읽기 루프 내에서 프로그래밍 방식으로 bash 기능을 종료할 수 있는 방법이 있습니까?
답변1
파일이 없습니다 cat
. 모든 것이 정상입니다.
listen_to_thing() {
while read line; do
echo "read: $line"
case "$line" in
EOF) return 0 ;; # Return out of the function upon this event
esac
done </tmp/srv-output
}
$line
포함된 파일과 방금 종료된 파일을 구별하려면EOF
0이 아닌 상태를 반환하면 됩니다.
답변2
내 테스트에 따르면 이것이 효과가 있다고 생각합니다.
listen_to_thing(){
(
export kill_this="$BASHPID"
cat /tmp/srv-output | while read line; do
echo "catted: $line"
if [[ "$line" == 'EOF' ]]; then
kill -9 "$kill_this"
exit 0;
fi
done;
)
}
여기서 $BASHPID는 현재 프로세스 컨텍스트의 PID입니다.