Cegah panel / jendela agar tidak tertutup saat perintah selesai - tmux

33

Dalam tmux.conffile saya, saya sudah mengkonfigurasi untuk membuka windows, beri nama, setup panel dll .. dll.

Namun satu masalah yang saya miliki adalah bahwa jika salah satu panel meluncurkan perintah, katakanlah ls, maka panel menutup sendiri setelah perintah selesai (langsung). Apakah ada cara untuk mencegah perilaku ini? Atau apakah itu jatuh ke shell normal setelah perintah selesai?

Saya berasumsi bahwa saya perlu memulai shell -> mengeksekusi perintah ketika panel diluncurkan, tetapi saya akan terkutuk jika saya bisa mencari tahu caranya. Saya telah sedikit googled untuk masalah ini tetapi telah pendek.

rebus
sumber

Jawaban:

22

Anda memiliki dua pilihan.

  1. Alih-alih berjalan lsdi jendela Anda, jalankan shell, kemudian kirim keystrokes shell untuk mengeksekusi:

    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. Anda bisa makan siang urutan perintah sedemikian rupa untuk meninggalkan diri Anda dengan bash shell setelah perintah Anda yang lain dijalankan:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. Lihat jawaban jasonwryan untuk perincian tentang remain-on-exitopsi untuk menjaga panel tetap hidup setelah proses mereka keluar sehingga Anda dapat meninjau hasilnya.

  4. Jika output dari beberapa perintah layak dilihat sekali, mungkin layak menyegarkan. Jika Anda memantau keluaran dari sesuatu, Anda dapat watchsecara berkala mendapatkan keluaran baru. Ini harus dimainkan dengan baik dengan panel di tmux:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    
Caleb
sumber
Terima kasih sobat! Jawaban yang luar biasa, nomor 2 dan nomor 4 adalah persis apa yang saya kerjakan, tetapi nomor 1 sepertinya juga merupakan alternatif yang bagus. Terima kasih atas semua bantuannya, ini sangat dihargai (Anda berdua).
Stew
1
Keuntungan dari # 1 adalah bahwa perintah tetap dalam sejarah shell dan dapat dengan mudah dieksekusi kembali. Jika perintahnya besar dan jelek, maka ini sangat membantu.
goertzenator
1
Ini bekerja untuk saya tanpa start-serverperintah, saya pikir itu dimulai secara otomatis jika diperlukan. Apakah ada untungnya menyebutnya secara eksplisit?
luator
1
@ Luator Saya pikir memulai server secara otomatis jika tidak ada yang ditemukan mungkin telah ditambahkan tmuxsejak saya menulis jawaban ini. Saya tidak tahu keuntungan apa pun jika versi Anda menelurkan proses server jika perlu.
Caleb
13

Anda bisa menggunakan remain-on-exitopsi:

tetap keluar saat [pada | off]
Jendela dengan set flag ini tidak dihancurkan ketika program yang berjalan di dalamnya keluar. Jendela dapat diaktifkan kembali dengan perintah jendela respawn.

Untuk menyederhanakan proses respawning, Anda mungkin ingin mengikatnya ke kunci:

bind-key R respawn-window

Ini akan memastikan Anda tidak meninggalkan jendela mati ketika program keluar.

jasonwryan
sumber
Saya sudah sampai di sana! Saya kehabisan waktu dan memutuskan untuk mengedit jawaban saya. Ya, ini adalah opsi ketiga, kerugian utama adalah ia meninggalkan jendela hanya baca yang tidak dapat Anda gunakan kembali tanpa membuat ulang.
Caleb
Poin bagus. Saya telah memperbarui dengan solusi (semi-).
jasonwryan
Apakah ini berfungsi dengan panel?
azmeuk
1
pengaturan ini dari baris perintah dapat dilakukan dengantmux set-option remain-on-exit on
rmanna
1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace
1

Berikut adalah contoh lanjutan menggunakan send-keysmetode yang direkomendasikan oleh @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
jtpereyda
sumber