脚本中的 Tmux 通过 SSH

脚本中的 Tmux 通过 SSH

我正在尝试编写一个脚本,该脚本可在远程和本地计算机上生成多个长时间运行的命令。目前,我的解决方案的一个示例是:

#!/bin/bash

ssh -t [email protected] tmux new -s remote -d "find / *"

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

但是,当这些命令变得更加复杂(长而带有引号的链式命令,而不仅仅是单个find命令)时,将它们放在一行上并转义所有嵌套的引号会变得混乱。

我曾尝试使用 SSH 和所谓的“此处文档”,例如:

ssh -t [email protected] << EOF
    tmux new -s remote -d "find / *"
EOF

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

但这会导致not a terminalSSH 的 -T 或 -t 选项出现错误,或者在使用 -tt 选项时出现一些非常奇怪的行为。

有什么建议可以优化/彻底改变我的方法吗?

答案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仅仅是举例。

相关内容