У меня есть программа на сервере, выполнение которой должно быть инициировано с клиента bash-скриптом с использованием ssh. Более того, этот скрипт должен открывать сессию tmux на сервере, запускать программу с некоторым аргументом и завершать сессию после возврата программы.
Я пробовал несколько решений, но ни одно из них не увенчалось успехом.
1)
#! /bin/bash
argument='12345678'
ssh user@host << EOF
tmux new-session -t session1
./program $argument
tmux kill-session -t session1
EOF
Программа выполняется на сервере, но без сеанса tmux.
Вывод: «Открыть терминал не удалось: не терминал»
2)
#! /bin/bash
ssh user@host -t 'tmux new-session -t session1'
Как минимум, эта команда открывает сессию (на самом деле не знаю, что это за конструкция ssh user@host -t '...' и как она работает. Если кто-то объяснит, буду благодарен) и я могу набирать команды вручную. Но я не знаю, как заставить сервер запускать мою программу, используя скрипт, как я планирую. Пожалуйста, помогите мне найти решение.





Скажите tmux, чтобы запустить программу для вас.
ssh user@host "tmux new-session -t session1 './program \"$argument\"'"
Это запустит program вместо оболочки в (единственном) окне нового сеанса. При выходе из программы окно закрывается, а вместе с ним завершается и сессия. (Цитирование может стать немного неуместным, поэтому я называю это вне рамок этого вопроса.)
Я думаю, вы хотите создать «отдельный» сеанс tmux, а затем использовать tmux send-keys для отправки командных инструкций в сеанс. Кроме того, я бы использовал полный путь к program. Например. что-то вроде этого
ssh user@host << EOF
tmux new-session -t session1 -d
tmux send-keys -t session1 "/path/to/the/program $argument" C-m
tmux kill-session -t session1
EOF
Вы можете начать новый сеанс tmux в автономном режиме, а затем отправлять команды с помощью команды tmux send-keys:
#! /бин/баш
argument='12345678'
ssh user@host << EOF
tmux new-session -t session1 -d
tmux send-keys -t session1:1 "./program $argument && tmux -d" ENTER
EOF
Уважаемый chepner, попробовал ваш вариант на простом примере.
argument='exmpl'ssh user@host "tmux new-session -t session1 'touch \"$argument\"'"Файл exmpl не создан... Клиентский терминал выдает мне вывод: "имя команды или окна задано с целью"