Сценарий Bash: переключатель между двумя терминалами для выполнения команд

Я хочу иметь сценарий, который сначала подключает меня к удаленному ПК с ssh и выполняет некоторые команды там. Эти команды запускают процесс, который будет работать навсегда (остановки с вводом данных пользователем). Теперь, я должен выполнить некоторые команды на своем локальном ПК (к сожалению, не возможно выполнить их прежде ssh'ing). Таким образом, мои мысли состоят в том, чтобы открыть новый терминал прежде, чем соединиться с удаленным, затем выполнить ssh и команды, и затем переключиться назад на терминал в локальном и выполнить остальную часть команд. Два исходных данных являются портом на удаленном и портом на локальном.

До настоящего времени мой сценарий похож, следуйте:

#!/bin/bash

echo "Connecting to server"
ssh -t -t <name>@ip << EOF
cd /path/to/directory &&
conda activate <environment_name> &&
tensorboard --logdir=<log/directory> --port $2
EOF
echo "Connected"

gnome-terminal -e exit
echo "Connecting with localhost"
ssh -N -f -L localhost:$1:localhost:$2 <name>@ip

Но это не работает. Я только подключаюсь к удаленному, и не возможно открыть xterm впоследствии, потому что tensorboard постоянно работает. Так, как открыть терминал заранее и переключиться назад на него?

Или какое-либо другое предложение, как решить эту проблему?

Заранее большое спасибо!

2
задан 25 March 2019 в 23:24

2 ответа

Я рекомендовал бы byobu. Я надеюсь следующий сервер кода Ваша цель:

#!/bin/bash
# Check if there is already a session named 'remote'
if [ -z "$(byobu list-sessions | grep remote)" ]
    # If not, start a new session 
    then
    byobu new-window -n remote ssh user@remote;
    byobu send-keys -t remote 'conda activate <env>' 'C-m'
    byobu send-keys -t remote 'tensorboard --logdir=<log/directory> --port $2' 'C-m'
    byobu new-window -n local;
    byobu send-keys -t local 'ssh -N -f -L localhost:$1:localhost:$2 <name>@ip' 'C-m'
fi
# Attach session
byobu attach-session -t remote

В коде выше, я не уверен, что $1 и $2! я рекомендовал бы создать небольшую доступную функцию (любой в .bashrc или исполняемый файл в $HOME/bin), который принял бы эти параметры...

Надеюсь, это поможет!

- Mike

1
ответ дан 2 December 2019 в 04:38

Вы рассмотрели выполнение задания в фоновом режиме? Можно достигнуть этого при добавлении амперсанда & в конец команды. Можно отправить несколько заданий в фон bgи затем возвратите их в приоритетном использовании fg

0
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

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