이를 수행하는 방법을 Google에서 검색할 때 찾을 수 있는 것은 기록을 저장하지 않고 세션을 종료하는 방법(예: kill -9 $$
)뿐이었지만 정반대의 문제에 직면했습니다. 명령이 아닌 모든 기록을 저장하고 싶습니다 exit
.
Comcast는 파이프를 손상시키지 않고는 SSH 터널을 5분 이상 유지할 수 없을 정도로 직장에서 우리를 학대했습니다. 다시 연결한 후 마지막 명령을 실행하러 갔는데 당연히 지금은 잊어버렸습니다 exit
!
답변1
쉘은 중지하라는 명령을 받을 때까지( command 를 입력하여 exit
) 또는 파일 끝(EOF)이 발생할 때까지(쉘이 스크립트를 실행할 때와 마찬가지로) 터미널(즉, 쉘의 표준 입력)에서 명령을 읽습니다.
명령이 입력 되면 exit
먼저 기록에 저장된 다음 쉘이 종료됩니다. 입력 ctrl- DEOF를 생성합니다. 이는 명령이 아니라 입력 상태이므로 셸 기록에 저장할 수 없습니다.
bash
EOF를 무시하도록 지시할 수 있는 방법은 두 가지가 있습니다.
- -o 무시 설정
- EOF 무시=
n
첫 번째 방법은 실행과 동일합니다 . 즉, 쉘이 종료되기 전에 연속으로 - 10번을 IGNOREEOF=10
눌러야 합니다 . 이는 예를 들어 오타 등 을 한 경우 쉘이 예기치 않게 종료되는 것을 방지하기 위한 것입니다 .ctrlDctrlC
또한 ctrl-는 줄의 첫 번째 항목으로 입력될 때만 생성됩니다(즉, 입력 후). D해당 줄에 이미 입력된 내용이 있으면 무시됩니다.EOF
bash
ctrl- D쉘 외부에서도 생성됩니다. EOF
예를 들어:
$ wc
foo bar
<ctrl-D>
1 2 8
wc
1줄, 2단어, 8자(줄 바꿈 포함)로 계산됩니다.
다음은 라인에 일부 입력을 제공한 후 -를 사용하는 예입니다 ctrl.D
$ wc
foo bar<ctrl-D><ctrl-D> 0 2 7
이제 wc
0행( enter
제공되지 않음), 2단어, 7문자를 계산했습니다. 데이터가 이미 제공되었기 때문에 두 가지 ctrl순서 가 필요합니다. 예를 들어, 데이터가 이 행에 입력되었는지 여부를 무시하고 이를 구체적으로 처리한다는 점에 유의하십시오 . 이는 .Dbash
EOF
dash
bash
답변2
@StéphaneChazelas가 추가를 제안한 경우ServerAliveInterval
작동하지 않는 경우(값을 사용해 볼 수도 있음 ) 끊어진 연결을 복원할 수 있도록 GNU 300
와 같은 것을 고려할 수도 있습니다 .screen
tmux
~/.bashrc
모든 원격 시스템 상단에 다음이 있습니다.
screen -r >/dev/null 2>&1
연결이 끊긴 화면 세션이 누락된 경우(예: 두 번째 연결이거나 방금 재부팅한 경우) 아무 작업도 수행하지 않지만 화면 세션이 있는 경우(다른 곳에 연결되지 않은 경우) 자동으로 다시 연결해 보세요. 붐, 모든 이전 기록(및 활성 명령 등)이 복원됩니다. ( screen
처음 로그인한 것으로 가정합니다.)
또한 이를 반복 SSH 연결과 결합했습니다. 제가 말하는 내용의 간단한 버전은 다음과 같습니다.
while sleep 1; do ssh remotehost; done
이렇게 하면 연결을 끊을 때 자동으로 다시 연결됩니다(Ssh 키가 있고 ssh-agent
비밀번호 없는 키를 사용한다고 가정하면 이는 심지어 투명합니다).