3

То, что я хочу сделать, действительно просто, но я не могу найти простой ответ.

Я нашел этот вопрос и этот вопрос, но они не совсем то, что мне нужно - я не запускаю несколько сессий или окон или что-то в этом роде сумасшедшее - я просто хочу, чтобы tmux выполнил команду (вероятно, скрипт bash) внутри себя, после того, как он открывается.

Поэтому в основном я набираю "tmux", сессия открывается, и внутри сессии tmux автоматически выполняет «hello_world.sh» или что-то подобное.

Кто-нибудь знает как это сделать? Файл .tmux.conf, похоже, не принимает «send-keys», но я могу использовать его неправильно.

Спасибо всем заранее.

Редактировать: ответил на мой собственный вопрос благодаря JohnKiller. Я не думал о том, что /root/.bashrc запускается при входе в систему, И когда открывается TMUX. Я добавил к нему утверждение if, ответьте ниже.

2 ответа2

5

Благодаря предложению JohnKiller я понял, что .bashrc выполняется как при открытии нового tty, так и при открытии TMUX в терминале.

Для будущих читателей: на переменную $ TMUX обычно ссылаются, чтобы увидеть, работает ли TMUX вообще, но вы также можете использовать "pidof tmux". Переменная $ TMUX будет заполнена примерно так: «/tmp/tmux-0/default, 27389,0», если TMUX запущен.

В моем конкретном случае я использую CentOS 6, и он настроен на автоматический вход с root, поскольку это всего лишь тестовое изображение. Я смог сделать это, отредактировав /etc/init/tty.conf:

exec /bin/mingetty --autologin root $TTY

Теперь, когда он настроен на автоматический вход в систему, я добавил следующее в /root/.bashrc:

if [[ `tty` == "/dev/tty1" ]] && [[ -z "$TMUX" ]];then
        tmux
fi

Для новичков, читающих это, это говорит: «Если мой терминал - терминал 1, а переменная $ TMUX имеет нулевую длину, запустите tmux».

Затем следует:

if [[ -n "$TMUX" ]] && [[ ! -e "/root/.automatic_start_occurred" ]];then
        touch /root/.automatic_start_occurred
        /usr/bin/hello_world
fi

Опять же, для новичков, это говорит: «Если $ TMUX не равен нулю в длине, а файл« .automatic_start_occurn »не существует («!"в операторе if), создайте файл"/root/.automatic_start_occurned "и затем выполните" hello_world "в /usr /bin.

Это именно то, что я искал для своей системы: после загрузки TTY1 появится с TMUX, а остальные TTY останутся одни. Когда TMUX всплывает в первый раз, он выполнит некоторые произвольные команды и никогда не выполнит их снова, пока не будет удален файл ".automatic_startup_occurn".

0

https://wiki.archlinux.org/index.php/tmux#Autostart_tmux_with_default_tmux_layout

Отредактируйте ~/.bashrc и добавьте:

if [ -z "$TMUX" ]; then
    YOUR CODE HERE
fi 

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