1

Может кто-нибудь помочь объяснить, что происходит с tmux , bash и exec? Я пытаюсь настроить сеанс tmux с окном 4 панели. В идеале я хочу запустить команду в 3-х панелях: например, сервер Ruby Thin и пара Ruby-демонов. Это то, что я до сих пор:

~/.bin/tmux-foo:

#!/bin/sh

tmux new-session -d -s foo 'exec pfoo "bundle exec thin start"'
tmux rename-window 'Foo'
tmux select-window -t foo:0
tmux split-window -h 'exec pfoo "bundle exec compass watch"'
tmux split-window -v -t 0 'exec pfoo "rake ts:start"'
tmux split-window -v -t 1 'exec pfoo'
tmux -2 attach-session -t foo

~/.bin/pfoo:

#!/bin/bash
cd ~/projects/foo
rvm use ree

# here I want to execute command1 2 3 or 4...

exec $SHELL

Это все работает ... но когда я ctlr-c на первой панели, на которой работает тонкий сервер, он останавливает тонкий сервер и возвращается в оболочку. Тем не менее, команда не в истории; то есть, если я нажму клавишу "вверх", я не получу команду bundle exec thin start ... Я получил какую-то другую команду из моей истории Bash. Мне интересно, есть ли способ расположить эти сценарии так, чтобы я получал команды в истории bash.

Также... Я перепробовал множество комбинаций exec , exec $SHELL -s ... и exec $SHELL -s ... -I и я не совсем уверен, что происходит ...

Может кто-нибудь помочь объяснить общую идею, что происходит с tmux bash и exec здесь?

2 ответа2

1

Оказывается, я хотел что-то вроде этого:

tmux splitw -t 'foo':2
tmux send-keys -t 'foo':2 'rvm use ree' C-m
tmux send-keys -t 'foo':2 'bundle exec compass watch

send-keys с C-m выполнит команду в окне / панели и сохранит ее в истории.

0

Команды не входят в историю оболочки просто потому, что вы запустили оболочку после выполнения этих команд. Ctrl-C не возвращается в оболочку; это заставляет pfoo начинать новый (строка exec $SHELL ).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .