2 votes

Tmux sur SSH en script

J'essaie d'écrire un script qui génère plusieurs commandes longues sur une machine locale et distante. Actuellement, un exemple de ma solution serait :

#!/bin/bash

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

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

Cependant, lorsque ces commandes deviennent plus complexes (commandes longues, enchaînées, avec des guillemets, au lieu d'une simple find ), il devient compliqué de les mettre sur une seule ligne et d'échapper à tous les guillemets imbriqués.

J'ai essayé d'utiliser SSH avec un soi-disant "document ici", par exemple :

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

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

Mais cela conduit soit à l'erreur not a terminal avec l'option -T ou -t pour SSH, ou à un comportement très étrange en utilisant l'option -tt.

Avez-vous des suggestions pour optimiser ou modifier radicalement mon approche ?

2voto

crimson-egret Points 2977

Je pense que vous devriez pouvoir combiner cette idée con cette autre idée et obtenir quelque chose comme ça pour travailler :

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 - les deux commandes s'exécutent en parallèle et dans le même espace de travail. tmux session.

Certains problèmes de citation et d'échappement peuvent subsister en fonction de la complexité des commandes que vous souhaitez exécuter. Notez également le read -p done ou vos commandes s'exécuteront, se termineront et la tmux se terminera également sans que vous ne voyiez la sortie. C'est peut-être ce que vous vouliez, et l'utilisation de la fonction find n'était qu'un exemple.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X