Ngăn chặn cửa sổ / cửa sổ đóng khi lệnh hoàn thành - tmux


33

Trong tmux.conftập tin của tôi, tôi đã cấu hình nó để mở các cửa sổ, đặt tên cho chúng, thiết lập các bảng, v.v.

Tuy nhiên, một vấn đề tôi gặp phải là nếu một trong các pan khởi chạy một lệnh, giả sử ls, thì khung sẽ tự đóng lại sau khi lệnh hoàn thành (ngay lập tức). Có cách nào để ngăn chặn hành vi này? Hoặc có nó rơi xuống một vỏ bình thường sau khi một lệnh hoàn thành?

Tôi giả sử rằng tôi cần khởi động shell -> thực thi lệnh khi khung khởi chạy, nhưng tôi sẽ bị nguyền rủa nếu tôi có thể tìm ra cách. Tôi đã googled một chút cho vấn đề này nhưng đã đi lên ngắn.

Câu trả lời:


22

Bạn có một cặp đôi tùy chọn.

  1. Thay vì chạy lstrong cửa sổ của bạn, hãy chạy shell, sau đó gửi tổ hợp phím shell để thực thi:

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
  2. Bạn có thể ăn trưa một chuỗi các lệnh theo cách để lại cho mình một vỏ bash sau khi các lệnh khác của bạn đã chạy:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. Xem câu trả lời của jasonwryan để biết chi tiết vềremain-on-exit tùy chọn giữ cho panes tồn tại sau khi quá trình của chúng đã thoát để bạn có thể xem lại đầu ra.

  4. Nếu đầu ra của một số lệnh đáng xem một lần, nó có thể đáng để làm mới. Nếu bạn đang theo dõi đầu ra của một cái gì đó bạn có thể watchđịnh kỳ nhận đầu ra mới. Điều này sẽ chơi độc đáo với panes trong tmux:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

Cảm ơn người đàn ông! Câu trả lời tuyệt vời, số 2 và số 4 chính xác là những gì tôi đang làm việc, nhưng số 1 có vẻ như là một sự thay thế tuyệt vời. Cảm ơn tất cả sự giúp đỡ, nó thực sự đánh giá cao (cả hai bạn).
Hầm

1
Ưu điểm của # 1 là lệnh vẫn còn trong lịch sử shell và có thể dễ dàng thực hiện lại. Nếu lệnh lớn và xấu, thì điều này rất hữu ích.
goertzenator

1
Nó đang làm việc cho tôi mà không cần start-serverlệnh, tôi nghĩ nó được khởi động tự động nếu cần. Có một lợi thế của việc gọi nó rõ ràng dù sao?
luator

1
@luator Tôi nghĩ tự động khởi động máy chủ nếu không tìm thấy có thể đã được thêm vào tmuxkể từ khi tôi viết câu trả lời này. Tôi không biết bất kỳ lợi thế nào nếu phiên bản của bạn sinh ra một quy trình máy chủ nếu cần thiết.
Caleb

13

Bạn có thể sử dụng remain-on-exit tùy chọn:

vẫn còn trên lối ra [trên | tắt]
Một cửa sổ với bộ cờ này không bị phá hủy khi chương trình đang chạy trong đó thoát. Cửa sổ có thể được kích hoạt lại bằng lệnh cửa sổ hồi sinh.

Để đơn giản hóa quá trình hồi sinh, bạn có thể muốn liên kết nó với khóa:

bind-key R respawn-window

Điều này sẽ đảm bảo bạn không còn cửa sổ chết khi chương trình thoát.


Tôi đã đến đó! Tôi đã hết thời gian và quyết định tôi phải chỉnh sửa câu trả lời của mình. Vâng, đây là tùy chọn thứ ba, nhược điểm chính là nó để lại một cửa sổ chỉ đọc mà bạn không thể sử dụng lại mà không tạo lại.
Caleb

Điểm tốt. Tôi đã cập nhật với một cách giải quyết (bán).
jasonwryan

Nó có hoạt động với panes không?
azmeuk

1
thiết lập điều này từ dòng lệnh có thể được thực hiện vớitmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

Dưới đây là một ví dụ mở rộng sử dụng send-keysphương thức được đề xuất bởi @Caleb

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
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.