'timeout'과 함께 사용하면 'read' 내장 기능이 무기한 중단됩니다.

'timeout'과 함께 사용하면 'read' 내장 기능이 무기한 중단됩니다.

아래 스크립트는 or와 완벽하게 작동 하지만 or bash와는 작동하지 않습니다 . 누른 후에도 여전히 작동하지 않습니다 . 에서만 작업 할 수 있지만 에서는 작업할 수 없습니다 .sudo bashshenter^C^\^Zsudo bash

printf '#!/bin/sh\nread var\n' > myscript
chmod +x myscript
sh -c "timeout -k 1 10 ./myscript"
# it does work when `bash` is used instead of `sh`

을 사용할 수 있다는 것을 알고 있습니다 read -t 10. (다음 버전에서는 사용할 수 없으며 다음을 sh사용하여 작동합니다.오직어쨌든 사용을 중단 하면 timeout. ) 그러나 내가 그것을 사용하는 이유는 (다른 것)에 그것이 필요 timeout하기 때문입니다 . 나는 해결책이 필요하지 않지만 / 사물에 대한 설명이 필요하며 and에 대한 해결책을 찾고 싶습니다 .readmyscriptbashsudo bashtimeoutread

답변1

왜 이런 일이 일어나는지는 아직 모르지만, 이는 다양한 쉘이 신호를 실행하고 처리하는 방식과 관련이 있습니다. 아무래도 이런 모양이군요일부해결책:

sh -c "timeout --foreground -k 1 5 ./myscript"

다음과 동일 sudo bash:

sudo bash -c "timeout --foreground -k 1 5 ./myscript"

man timeout다음과 같이 설명되나요?

--foreground

       when not running timeout directly from a shell prompt,

       allow COMMAND to read from the TTY and get TTY signals; in  this
       mode, children of COMMAND will not be timed out

이것이 무엇을 의미하는지, 결과가 무엇인지는 잘 모르겠지만 아마도 이것이 당신이나 다른 사람에게 도움이 될 것입니다.

관련 정보