Terminal - làm thế nào để khởi động lại phiên sau khi vô tình thoát?


22

Đôi khi, tôi vô tình thoát khỏi phiên Terminal (thường là vì tôi nghĩ rằng tôi đã kết nối với một hệ thống từ xa, khi tôi không), vì vậy tôi đi đến điểm này:

nhập mô tả hình ảnh ở đây

Làm thế nào tôi có thể khởi động lại phiên vào thời điểm này? Tôi không muốn đóng cửa sổ hoặc tab vì tôi có một loạt các tab được thiết lập cho quy trình làm việc bình thường của mình, vì vậy tôi chỉ muốn phiên làm việc trong tab hiện tại diễn ra một lần nữa (tức là quay lại dấu nhắc bash).

Giải pháp duy nhất tôi tìm thấy cho đến nay là thoát hoàn toàn Terminal và mở lại, nhưng điều đó không lý tưởng lắm vì nó rõ ràng làm gián đoạn bất cứ điều gì khác mà tôi đang làm trong các cửa sổ / tab Terminal khác.


1
Trình giả lập thiết bị đầu cuối Linux (KDE / Gnome) cho phép bạn sắp xếp lại các tab. Vì vậy, nếu bạn bắt đầu một tab mới, bạn có thể di chuyển nó để thay thế tab bạn đã đóng. Thiết bị đầu cuối của OS X không có điều đó sao? (Tôi không phải là người mac, tôi chỉ thấy điều này trong "câu hỏi mạng nóng".) Tôi cũng thích sử dụng màn hình GNU để ghép nhiều phiên shell, thay vì các tab trong cửa sổ đầu cuối. Tôi có một tab khác với phiên màn hình trên một máy tính khác. Thỉnh thoảng tôi mở một thiết bị đầu cuối khác nếu tôi muốn nhìn thấy hai thứ cùng một lúc, nhưng thông thường tôi thích số vỏ của mình được đánh số, màn hình hoạt động, thay vì chỉ ở đó
Peter Cordes

1
Dù sao, tôi đề nghị màn hình (hoặc tmux nếu bạn chưa biết màn hình) để giữ nhiều shell trên cùng một máy chủ trong một tab GUI. Hệ thống phân cấp hai tab / cửa sổ màn hình này cho phép mở nhiều thứ, mà không mất dấu vết của những gì ở đâu. Ngoài ra, như tôi đã nói, việc có các số cho các shell khác nhau giúp bạn dễ dàng nhớ số nào để trao đổi ( ^t 8ví dụ) cho một bối cảnh cụ thể, thay vì đếm trực quan tab nào để nhấp hoặc (hoặc có bao nhiêu ctrl-pgup để nhấn) .
Peter Cordes

1
cả màn hình và tmux đều có cuộn ngược cấu hình bên trong mỗi cửa sổ màn hình. Mặc dù vậy, tôi không nhớ đã thấy bất cứ điều gì về việc giữ cuộn trên đĩa để duy trì trong suốt quá trình khởi động lại! Thật gọn gàng. Ba tab là đủ dễ dàng để theo dõi về tinh thần. Tôi thường có một cái gì đó như 10 trên máy tính để bàn tại nhà, vì tôi làm gần như mọi thứ từ dòng lệnh, không phải trình duyệt tệp GUI. (phát video / audiobook, v.v.) Tôi thường có khoảng ba vỏ cdcho mã nguồn khi tôi đang làm việc với mã, do đó, phù hợp với cách sử dụng của bạn.
Peter Cordes

1
Dù sao, việc kéo các tab xung quanh sẽ giúp bạn dễ dàng phục hồi sau khi vô tình đóng một tab, vì bạn có thể đặt nó trở lại ngay nơi nó đi.
Peter Cordes

1
Tôi không nghĩ nhiều người sử dụng chúng cục bộ, cho các phiên shell cục bộ bên trong một tab trình giả lập thiết bị đầu cuối duy nhất. IDK, có thể những người nghiện dòng lệnh cũ khác cũng làm điều đó. Trường hợp sử dụng chính là sau khi sshing ở đâu đó. Tôi chỉ quen với việc sử dụng màn hình và sử dụng nó cục bộ cũng như trong các phiên từ xa. Theo tôi hiểu, nếu bạn chưa có screentrong bộ nhớ cơ bắp, hãy học tmux vì màn hình đã cũ và hỏng. Tôi có thể có thể chuyển sang tmuxvà định cấu hình nó để sử dụng tất cả các tổ hợp phím giống như tôi sử dụng screen, nhưng màn hình vẫn hoạt động tốt với tôi.
Peter Cordes

Câu trả lời:


26

Tại thời điểm này, không có cách nào để lấy lại tab. Phiên cuối bị đóng và không còn TTY. Không có cách nào để tham chiếu tab để làm bất cứ điều gì thông minh. Tôi khuyên bạn nên thêm chức năng này vào .bashrc hoặc .profile để bạn không gặp sự cố trong tương lai:

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
}

hoặc, đối với những người trong chúng tôi sử dụng Z Shell (thêm nó vào .zshrc của bạn):

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

Đó là một rào cản nhỏ đẹp giữa bạn và lệnh thoát khó chịu đó! Chúa biết tôi đã làm điều tương tự nhiều lần trong quá khứ.


1
Bạn đã nhận nó! Bây giờ, sau 5 giây ( -t 5tùy chọn), lệnh đọc sẽ thất bại, điều này sẽ kích hoạt lệnh thoát theo sau nó.
William T Froggard

1
Tuyệt vời - cảm ơn - Tôi ước tôi có thể cho bạn hai phiếu bầu! ;-)
Paul R

1
@PaulR: Bạn không cần bí danh exitnếu bạn đang sử dụng Bash. Bạn có thể đặt tập lệnh của bạn vào ~/.bash_logout.
Tạm dừng cho đến khi có thông báo mới.

2
@DennisWilliamson: ý tưởng thú vị, nhưng tôi không chắc chắn cách bạn hủy đăng xuất từ ​​bên trong .bash_logout?
Paul R

3
@PaulR: Rất tiếc. Tôi đã không xem xét điều đó! Để hoàn thiện, bạn cũng nên đặt bí danh logoutvà đặt IGNOREEOFlớn hơn 1 (hoặc rebind ^ D).
Tạm dừng cho đến khi có thông báo mới.

5

Kịch bản của William T Froggard đã không làm những gì tôi cần, bởi vì nói chung cách duy nhất tôi gặp phải trong tình huống này là thông qua ^ D ( ctrl+ D), và việc xác định lại exitkhông làm gì cho tình huống đó. Đối với tôi, đề nghị thiết lập của Dennis Williamson IGNOREEOFlà đủ. Tôi chỉ thêm:

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

vào ~/.bashrctệp của tôi và bây giờ (nếu tôi ở trình bao cấp cao nhất và sẽ thoát khỏi thiết bị đầu cuối) thì ^ D đầu tiên tạo ra phản hồi:

Use "logout" to leave the shell.

Nếu tôi gõ ^ D một lần nữa ngay lập tức, trình bao thoát ra, do đó thoát ra khi tôi muốn vẫn dễ dàng, nhưng bây giờ một ^ D sẽ đưa ra cảnh báo cho tôi. (Nếu bạn muốn, bạn có thể đặt thành IGNOREEOFsố cao hơn để yêu cầu thêm ^ D's.)

Cũng hữu ích, nếu tôi ở trong vỏ phụ, ^ D đầu tiên tạo phản hồi:

Use "exit" to leave the shell.

Một lần nữa, một ^ D sẽ giúp tôi thoát ra và bây giờ tôi có thể nhận ra sự khác biệt giữa việc thoát khỏi một lớp vỏ phụ và thoát khỏi lớp vỏ cấp cao nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.