Bagaimana cara membagi jendela baru dan menjalankan perintah di jendela baru ini menggunakan tmux?

28

saya telah mencoba

tmux -c "shell command" split-window

tapi sepertinya tidak berhasil.

Dengan menggunakan tmux split-window, seseorang dapat membagi jendela baru.

PEMBARUAN :

Menggunakan tmux split-window 'exec ping g.cn'dapat menjalankan perintah ping, tetapi ketika dihentikan jendela baru akan ditutup.

atupal
sumber
4
man tmux | less -p remain-on-exit...
jasonwryan

Jawaban:

38

Menggunakan:

tmux split-window "shell command"

The split-windowperintah memiliki sintaks berikut:

 split-window [-dhvP] [-c start-directory] [-l size | -p percentage] [-t
         target-pane] [shell-command] [-F format]

(dari man tmux, bagian "Windows dan Panes"). Perhatikan bahwa urutan itu penting - perintah harus datang setelah salah satu dari opsi-opsi sebelumnya yang muncul, dan itu harus menjadi argumen tunggal, jadi Anda perlu mengutipnya jika memiliki spasi.


Untuk perintah seperti ping -citu berakhir dengan cepat, Anda dapat mengatur remain-on-exitopsi terlebih dahulu:

tmux set-option remain-on-exit on
tmux split-window 'ping -c 3 127.0.0.1'

Panel akan tetap terbuka setelah pingselesai, tetapi ditandai "mati" sampai Anda menutupnya secara manual.

Jika Anda tidak ingin mengubah opsi keseluruhan, ada pendekatan lain. Perintah dijalankan dengan sh -c, dan Anda dapat mengeksploitasi itu untuk membuat jendela tetap hidup di akhir:

tmux split-window 'ping -c 3 127.0.0.1 ; read'

Di sini Anda menggunakan readperintah shell untuk menunggu baris baru input pengguna setelah perintah utama selesai. Dalam hal ini, output perintah akan tetap sampai Anda menekan Enterdi panel, dan kemudian secara otomatis akan menutup.

Michael Homer
sumber
Terima kasih Michawl Homer :-). Saya menemukannya juga sekarang /. Tetapi bagaimana menjaga agar jendela baru tidak tertutup?
atupal
@atupal: Lihat edit - diatur remain-on-exitatau digunakan cmd ; read.
Michael Homer
2

bash --rcfile

Teknik ini membuka shell baru, menjalankan perintah, dan membiarkan Anda di sana setelah perintah selesai:

tmux-split-cmd() ( tmux split-window -dh -t $TMUX_PANE "bash --rcfile <(echo '. ~/.bashrc;$*')" )
tmux-split-cmd 'cd; pwd; ping google.com'

Atau jika perintah tidak memiliki karakter terminal khusus seperti ;:

tmux-split-cmd ping google.com

Ini menggunakan:

Varian lain yang menarik adalah:

tmux-split-cmd-uniq() (
  if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
    tmux kill-pane -t 1
  fi
  tms "$@"
)

yang membunuh split sebelumnya jika sudah ada, dan membantu menjaga hanya satu split tambahan setiap saat.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber