1

Я пытаюсь написать скрипт, который порождает несколько длительных команд как на удаленной, так и на локальной машине. В настоящее время пример моего решения будет:

#!/bin/bash

ssh -t user@1.2.3.4 tmux new -s remote -d "find / *"

tmux new -s local -d "find / *"

Однако, когда эти команды становятся более сложными (длинные цепочечные команды с кавычками в них вместо одной команды find ), становится неудобно помещать их в одну строку и избегать всех вложенных кавычек.

Я пытался использовать SSH с так называемым "здесь документ", например:

ssh -t user@1.2.3.4 << EOF
    tmux new -s remote -d "find / *"
EOF

tmux new -s local -d "find / *"

Но это приводит либо к ошибке, а not a terminal с опцией -T или -t для SSH, либо к очень странному поведению при использовании опции -tt.

Любые предложения, чтобы оптимизировать / кардинально изменить мой подход?

1 ответ1

1

Я думаю, вы должны быть в состоянии объединить эту идею с этой другой идеей и заставить что-то вроде этого работать:

CMDS=$(cat <<CMD
read -e -p "Enter the path to the find: " FILEPATH
echo \$FILEPATH
#find \$FILEPATH -name $FILENAME
#read -p done: 
CMD
) 

tmux new -s finder -n remote "ssh localhost -t '$CMDS'" \; \
        new-window -n local  "bash -c '$CMDS'" \; \
            attach \;

Бонус - обе команды работают параллельно и в одном сеансе tmux .

Некоторые проблемы с цитированием и экранированием могут остаться в зависимости от сложности команд, которые вы хотите выполнить. Также обратите внимание, что read -p done иначе ваши команды будут выполнены, прерваны, и tmux также прекратит работу, и вы не увидите вывод. Возможно, это то, что вы намеревались, и использование find было просто для примера.

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