원격 스크립트에서 tailf 명령을 종료한 후 세션을 유지하는 방법

원격 스크립트에서 tailf 명령을 종료한 후 세션을 유지하는 방법

다음 명령을 실행하는 PowerShell 스크립트가 있습니다.putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

스크립트 중에 tailf /dir/log/명령은 Execute_Command_File에 기록됩니다. 스크립트를 실행한 후 요청한 세션이 열리고 tailf작동 중입니다.

문제는 Ctrl+C를 눌러 종료하려고 하면 tailf터미널이 닫히는 것입니다.

/bin/bash도움이 되지 않는 끝에 추가하려고 했습니다 Execute_Command_File. 물론 시도했지만 tail -f/F작동하지 않았습니다 ...

어떤 아이디어가 있나요?

답변1

CTRL+C 때문에 죽는 일이 발생 tail하지만 부모에게도 전송됩니다(SINGINT) bash. 기본적으로 bash는 그러한 신호를 받으면 죽기 때문에 bash신호를 받을 때 의 기본 동작을 바꿔야 합니다 .

사용bash(1)이를 변경하는 내장 명령입니다 .

다음 스크립트 tailf-ctrl.sh 는 데모이며 답변을 보여줍니다.

#!/bin/bash
function finish {
    echo "CTRL-C pressed!"
}

F=testfile

echo hello > $F
# set custom action
trap finish SIGINT # comment this to see the problem
tail -f $F
# reset default action
trap - SIGINT

echo "Hello after" > after
cat after

참고:

  1. 서명CTRL+C와 관련된 신호입니다.
  2. 첫 번째SIGINT 신호와 관련된 사용자 정의 작업 설치
  3. 두번째SIGINT 신호의 기본 동작 재설정

스크립트의 출력은 다음과 같습니다

$ bash tailf-ctrl.sh 
hello
^CCTRL-C pressed!
Hello after

이는 두 번째 파일이 작성 되어 tail.CTRL-C

첫 번째 트랩 명령을 주석 처리하면 문제가 나타나는 것을 볼 수 있습니다. bash는 즉시 종료되고 출력은 다음과 같아야 합니다.

$ bash tailf-ctrl.sh 
hello
^C
$

관련 정보