Ответы:
Использование:
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
раздела «Окна и панели»). Обратите внимание, что порядок важен - команда должна идти после любой из предыдущих опций, которые появляются, и это должен быть один аргумент, поэтому вам нужно заключить его в кавычки, если у него есть пробелы.
Для таких команд, 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на панели, а затем автоматически закроется.
remain-on-exit
либо использовать cmd ; read
.
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
Это использует:
--rcfile
: Как вызвать bash, запустить команды внутри новой оболочки, а затем вернуть управление пользователю? | Переполнение стекаTMUX_PANE
: Как разделить окно, которое запускало команду "tmux split-window" вместо текущей?Еще один интересный вариант:
tmux-split-cmd-uniq() (
if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
tmux kill-pane -t 1
fi
tms "$@"
)
который убивает предыдущий сплит, если он уже существует, и помогает сохранить только один дополнительный сплит за все время.
man tmux | less -p remain-on-exit
...