Як розділити нове вікно та запустити команду в цьому новому вікні за допомогою tmux?


28

я намагався

tmux -c "shell command" split-window

але це, здається, не працює.

Використовуючи tmux split-window, можна розділити нове вікно.

ОНОВЛЕННЯ :

Використання tmux split-window 'exec ping g.cn'може запустити команду ping, але після зупинки нове вікно буде закрито.


4
man tmux | less -p remain-on-exit...
Jasonwryan

Відповіді:


38

Використання:

tmux split-window "shell command"

split-windowКоманда має наступний синтаксис:

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

man tmuxрозділу "Windows і панелі"). Зауважте, що порядок є важливим - команда повинна виконуватись після будь-якого з попередніх параметрів, які з'являються, і це повинен бути єдиний аргумент, тому вам потрібно цитувати його, якщо в ньому є пробіли.


Для таких команд, ping -cщо швидко закінчуються, ви можете remain-on-exitспочатку встановити параметр:

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

Панель залишатиметься відкритою після pingзавершення, але буде позначена "мертвою", поки не закриєте її вручну.

Якщо ви не хочете змінювати загальні параметри, є інший підхід. Команда виконується за допомогою sh -c, і ви можете скористатися нею, щоб вікно залишилося живим в кінці:

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

Тут ви використовуєте команду shell readдля очікування нового введення користувачем нового рядка після завершення головної команди. У цьому випадку командний вихід залишатиметься, поки ви не натиснете Enterна панель, а потім автоматично закриється.


Спасибі Міхаулу Гомеру :-). Я це теж знайшов /. Але як уберегти нове вікно від закритого?
atupal

@atupal: Див. редагування - або встановити, remain-on-exitабо використовувати cmd ; read.
Майкл Гомер

2

bash --rcfile

Ця техніка відкриває нову оболонку, виконує команди та залишає вас там після закінчення команд:

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

Або якщо в команді немає спеціальних символів терміналу, таких як ;просто:

tmux-split-cmd ping google.com

Для цього використовується:

Ще один цікавий варіант:

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

який вбиває попередній розкол, якщо він уже існує, і допомагає зберігати лише один додатковий розкол у всі часи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.