Как разделить новое окно и выполнить команду в этом новом окне с помощью tmux?

Это вызвано тем, что/etc/init.d/не установлен в $PATH.

Это - по существу:-separated список каталогов. При выполнении команды оболочка перерывает каждый из этих каталогов, один за другим, пока это не находит каталог, где исполняемый файл существует. (http://www.cs.purdue.edu/homes/cs348/unix_path.html)

28
29.08.2014, 11:02
2 ответа

Использовать:

tmux split-window "shell command"

Команда split-window имеет следующий синтаксис:

 split-window [-dhvP] [-c start-directory] [-l размер | -p проценты] [-t
 панель задач] [shell-command] [-F формат]

(из 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'

Здесь вы используете оболочку read command, чтобы дождаться ввода пользователем новой строки после того, как основная команда завершится. В этом случае вывод команды будет продолжаться до тех пор, пока вы не нажмете Enter в панели, после чего она автоматически закроется.

40
27.01.2020, 19:39

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 "$@"
)

, который уничтожает предыдущее разделение, если оно уже существует, и помогает всегда сохранять только одно дополнительное разделение.

5
27.01.2020, 19:39

Теги

Похожие вопросы