Tmux przez SSH w skrypcie


1

Próbuję napisać skrypt, który odradza wiele długo działających poleceń zarówno na komputerze zdalnym, jak i lokalnym. Obecnie przykładem mojego rozwiązania byłoby:

#!/bin/bash

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

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

Jednak gdy te polecenia stają się bardziej złożone (długie, łańcuchowe polecenia ze znakami cudzysłowu, zamiast tylko jednego findpolecenia), staje się bałaganem, aby umieścić je w jednym wierszu i uciec od wszystkich zagnieżdżonych znaków cudzysłowu.

Próbowałem użyć SSH z tak zwanym „dokumentem tutaj”, np .:

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

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

Prowadzi to jednak do błędu not a terminalz opcją -T lub -t dla SSH lub do bardzo dziwnych zachowań podczas korzystania z opcji -tt.

Wszelkie sugestie dotyczące optymalizacji / radykalnej zmiany mojego podejścia?


Dokument tutaj przekierowuje stdin, co nie jest tym samym, co polecenie w wierszu poleceń ssh (i ostatecznie tmux). Czy te polecenia są w dużej mierze naprawione, tak że zdalny plik skryptu (prawdopodobnie z małą liczbą parametrów) może być wykonalnym podejściem?
CVn

Chociaż te polecenia są w większości statyczne, chciałbym zachować tylko 1 zestaw skryptów zamiast 2 (lokalny + zdalny).
Girmi

Odpowiedzi:


1

Myślę, że powinieneś być w stanie połączyć ten pomysł z innym pomysłem i uzyskać coś takiego:

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 \;

Bonus - oba polecenia działają równolegle i w tej samej tmuxsesji.

Niektóre problemy dotyczące cytowania i zmiany znaczenia mogą pozostać w zależności od złożoności poleceń, które chcesz wykonać. Zauważ też, że read -p donetwoje polecenia wykonają się, zakończą, a także tmuxzakończą się bez zobaczenia wyniku. Być może właśnie to zamierzałeś, a użycie findbyło tylko na przykład.


To wydaje się dobrym rozwiązaniem. Przetestuję to pod kątem mojej konkretnej konfiguracji i zgłoś się. Mała uwaga: moim zamiarem jest, aby sesja SSH uruchamiała tmux na zdalnym hoście, zamiast lokalnej sesji tmux z uruchomionym SSH, tak jak robi to Twój kod. To pozwala mi łatwo połączyć się ponownie, jeśli sieć zostanie w pewnym momencie odłączona. Ale to dotyczy tylko mojego konkretnego przypadku. I findrzeczywiście był tylko przykładem długofalowego polecenia.
Girmi

Działa jak marzenie!
Girmi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.