때로는 `sleep 3` 대신 `read -t 3`을 사용하는 것이 더 편리합니다. "nohup"과 함께 작동하게 하려면 어떻게 해야 하나요?

때로는 `sleep 3` 대신 `read -t 3`을 사용하는 것이 더 편리합니다. "nohup"과 함께 작동하게 하려면 어떻게 해야 하나요?

read -t 3때로는 대신 사용하는 것이 더 편리합니다 sleep 3. 어떻게 작동하게 합니까 nohup?

nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out

보시다시피 read -t 33초 동안 기다리지 않습니다.

답변1

read -t 3( 이제 및 확장 ksh93에도 지원됨 )은 한 줄을 읽는 것을 의미합니다(zshbashmksh논리적-r이 줄의 줄은 표준 입력에서 $REPLY3초 시간 초과까지 후행 백슬래시(해당 옵션을 사용하지 않기 때문에)로 계속될 수 있습니다 .

stdin이 터미널인 경우 사용자가 Enter를 누르지 않는 한 3초 동안 절전 모드로 유지됩니다(스크립트가 백그라운드에서 시작된 경우 스크립트는 SIGTTIN 신호와 함께 정지됩니다).

일반 파일인 경우 해당 줄을 읽고 즉시 반환합니다. 만약 그렇다면 /dev/zero거기에서 기가바이트의 0을 읽는 것이 매우 바쁠 것입니다.

nohup터미널에서 명령을 분리하는 데 사용되는 명령입니다. 이는 stdin을 /dev/nullstdout으로 리디렉션하고 stderr을 nohup.out.아니요이 경우 터미널에서 읽고 싶습니다.

read/dev/null데이터를 반환하지 않고 즉시 반환하는 것이 목적 /dev/null입니다.

사용 목적이 read -t사용자가 중단할 수 있는 수면을 취하는 것이라면( Enter예를 들어 건너뛸 수 있는 메시지를 읽을 시간을 주고 싶을 때) 비대화형 ( read -t예: running under nohup스크립트를 지연시킬 필요가 없으므로 올바른 일인 것 같습니다.

그러나 stdin이 터미널인 경우 터미널에서 읽기 시간을 초과하고 그렇지 않은 경우에는 절전 모드로 전환하려면 다음을 수행합니다.

if [ -t 0 ]; then
  read -t 3
else
  sleep 3
fi

[ -t n ]파일 설명자가 있는지 테스트합니다.N(0은 stdin)은 터미널 장치를 나타냅니다.

이렇게 할 수도 있지만 보호하려는 터미널과의 상호 작용을 다시 추가하면 그렇게 됩니다 read -t 3 < /dev/tty.nohupnohup

관련 정보