터미널-실수로 종료 한 후 세션을 다시 시작하는 방법은 무엇입니까?


22

때로는 실수로 터미널 세션을 종료합니다 (보통 원격 시스템에 연결되어 있지 않다고 생각하기 때문에).이 시점에 도달합니다.

여기에 이미지 설명을 입력하십시오

이 시점에서 어떻게 세션을 다시 시작할 수 있습니까? 일반적인 워크 플로에 대해 많은 탭이 설정되어 있기 때문에 창이나 탭을 닫고 싶지 않으므로 현재 탭의 세션을 다시 시작하려고합니다 (예 : bash 프롬프트로 돌아 가기).

내가 지금까지 찾은 유일한 해결책은 터미널을 완전히 종료하고 다시 여는 것입니다.하지만 다른 터미널 창 / 탭에서 수행중인 다른 작업을 분명히 방해하므로 이상적이지 않습니다.


1
Linux (KDE / Gnome) 터미널 에뮬레이터를 사용하면 탭을 다시 정렬 할 수 있습니다. 따라서 새 탭을 시작하면 탭을 옮겨서 닫은 탭을 바꿀 수 있습니다. OS X의 터미널에는 없습니까? (나는 맥 사용자가 아니며, "핫 네트워크 문제"에서 이것을 보았습니다.) 또한 터미널 화면의 탭이 아닌 많은 쉘 세션을 다중화하기 위해 GNU 화면을 사용하고 싶습니다. 다른 컴퓨터에 스크린 세션이있는 다른 탭이 있습니다. 한 번에 두 가지를보고 싶을 때 가끔 다른 터미널을 열지 만 일반적으로 쉘 번호를 매기는 대신 화면이 표시되는 방식
Peter Cordes

1
어쨌든 하나의 GUI 탭에서 동일한 호스트의 여러 쉘을 유지하기위한 화면 (또는 화면을 모르는 경우 tmux)을 제안합니다. 이 두 단계의 탭 / 스크린 윈도우 계층 구조는 어디에 있는지 추적하지 않고도 많은 것들을 열어 둘 수 있습니다. 또한, 내가 말했듯이, 다른 쉘에 숫자가 ^t 8있으면 클릭 할 탭 또는 시각적으로 얼마나 많은 ctrl-pgup을 세는 대신 주어진 컨텍스트에 대해 (예를 들어) 어떤 숫자로 바꿀지 쉽게 기억할 수 있습니다. .
Peter Cordes

1
screen과 tmux는 각각의 화면 창 내에서 구성 가능한 스크롤 백을 가지고 있습니다. 그래도 재부팅시 지속성을 위해 디스크에 스크롤 백을 유지하는 것에 대해 아무것도 보지 못했습니다! 그거 멋지다. 세 개의 탭은 정신적으로 추적하기에 충분히 쉽습니다. GUI 파일 브라우저가 아닌 명령 줄에서 거의 모든 것을 수행하기 때문에 일반적으로 홈 데스크톱에는 10과 같은 것이 있습니다. (비디오 / 오디오 북 등 재생) 일반적으로 cd코드 작업을 할 때 소스 코드 에 대해 약 3 개의 셸 을 사용하므로 사용법과 일치합니다.
Peter Cordes

1
어쨌든 탭을 드래그하면 실수로 탭을 닫을 때 쉽게 복구 할 수 있습니다. 탭을 바로 다시 넣을 수 있기 때문입니다.
Peter Cordes

1
단일 터미널 에뮬레이터 탭 내의 로컬 셸 세션에 대해 많은 사람들이 로컬에서 사용한다고 생각하지 않습니다. IDK, 다른 구식 명령 줄 중독자도 마찬가지입니다. 주요 유스 케이스는 ssh어딘가에 있다가입니다. 방금 화면 사용에 익숙해졌으며 원격 세션뿐만 아니라 로컬에서도 사용했습니다. 내가 이해했듯이, 아직 screen근육 기억에 없다면, 화면이 오래되고 잔인하기 때문에 tmux를 배우십시오. 아마 tmux내가 사용하는 것과 동일한 키 바인드를 모두 사용하도록 전환 하고 구성 할 수는 screen있지만 화면은 여전히 ​​잘 작동합니다.
Peter Cordes

답변:


26

현재 탭을 다시 가져올 수있는 방법이 없습니다. 터미널 세션이 닫히고 더 이상 TTY가 없습니다. 영리한 일을하기 위해 탭을 참조 할 방법은 없습니다. 나중에 문제가 발생하지 않도록이 기능을 .bashrc 또는 .profile에 추가하는 것이 좋습니다.

exit() {
    read -t5 -n1 -p "Do you really wish to exit? [yN] " should_exit || should_exit=y
    case $should_exit in
        [Yy] ) builtin exit $1 ;;
        * ) printf "\n" ;;
    esac
}

또는 Z Shell을 사용하는 사용자는 .zshrc에 추가하십시오.

exit() {
    if read -t5 -q should_exit\?"Do you really wish to exit? [yN] "; then
        builtin exit $1
    fi
}

그것은 당신과 그 성가신 출구 명령 사이에 좋은 작은 장벽입니다! 주님은 제가 과거에도 같은 일을 여러 번 해왔음을 알고 계십니다.


1
맞아요! 이제 5 초 ( -t 5옵션) 후에 read 명령이 실패하고 그 뒤에 exit 명령이 트리거됩니다.
William T Froggard

1
훌륭합니다-고마워요-두 개의 투표권을 줄 수 있으면 좋겠습니다! ;-)
Paul R

1
@PaulR : exitBash를 사용하는 경우 별칭을 지정할 필요가 없습니다 . 에 스크립트를 넣을 수 있습니다 ~/.bash_logout.
추후 공지가있을 때까지 일시 중지되었습니다.

2
@DennisWilliamson : 흥미로운 아이디어이지만 어떻게 로그 아웃을 취소 할 것인지 잘 모르겠습니다 .bash_logout.
Paul R

3
@PaulR : 죄송합니다. 나는 그것을 고려하지 못했습니다! 완전성을 위해 별명을 지정 logout하고 IGNOREEOF1보다 큰 값 (또는 리 바인드 ^ D)을 설정 해야합니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

5

William T Froggard의 스크립트는 내가 필요한 것을하지 않았습니다. 일반적 으로이 상황에 들어가는 유일한 방법은 ^ D ( ctrl+ D) 를 통한 것이므로 재정의 exit는 해당 상황에 아무런 영향을 미치지 않기 때문입니다. 나에게 데니스 윌리엄슨의 제안 IGNOREEOF은 충분했다. 방금 추가했습니다.

# Do not exit on a single ^D, require 2 in a row
IGNOREEOF=1

~/.bashrc파일에 지금 (최상위 쉘에 있고 터미널을 종료하는 경우) 첫 번째 ^ D는 응답을 생성합니다.

Use "logout" to leave the shell.

^ D를 즉시 다시 입력하면 쉘이 종료되므로 원하는 시점에서 종료하는 것이 여전히 쉽지만 이제는 ^ D 하나가 경고를 표시합니다. (원하는 IGNOREEOF경우 추가 연속 ^ D를 요구하도록 더 높은 숫자로 설정할 수 있습니다 .)

하위 쉘에 있으면 첫 번째 ^ D가 응답을 생성합니다.

Use "exit" to leave the shell.

다시 ^ D가 추가로 나옵니다. 이제 하위 쉘 종료와 최상위 쉘 종료의 차이점을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.