bash脚本重定向输出并通过ssh显示在另一台机器上的另一台终端上

时间:2012-12-23 20:06:59

标签: bash

确定。我很难过。 我有两台电脑,称它们为machine1和machine2。我想在machine1上执行命令,并将输出传递给machine2。这部分很简单,我已经可以做到了。我所困扰的是如何打开机器2上的终端,在机器1上显示终端的输出。

一个例子:我在工作中运行一个需要花费很多时间的脚本。此脚本内置了一个进度对话框,它在machine1上显示终端的进度。当这个脚本运行时,我离开我的办公室(机器1的位置),开车到我的家庭办公室(机器2)。我想回到家时在机器2的终端上看到脚本的输出。

现在我使用以下解决方法:

#!/bin/bash

ssh user@machine2 'echo "" > file.txt; DISPLAY=:0.0 \
nohup conky -q -c /path/to/a/conkyrc \
> /dev/null 2> /dev/null < /dev/null &' \
#the conkyrc displays the last few lines of file.txt
echo "Hello world, or other commands" | ssh -q user@machine2 "sh -c 'cat >> file.txt'"

因此,它在machine1上运行一个命令,并将输出传递给机器2上的file.txt,该文件由机器2的屏幕上的conky读取和显示。当我回到家时,我看到了我开始在一个令人生畏的小组中显示的工作中运行的脚本的状态。

这是功能性的 - 但我想做得更好。

问题1: 如何修改上面的脚本,以便输出同时输出到machine2上的file.txt并仍然在machine1上输出?我尝试过使用

tee -a - ???? 

哪里????是一个ssh的位置。不幸的是,除非ssh位置安装在machine1上,否则这不起作用,我不想这样做。

问题2:我可以创建一个类似的效果,通过从机器1的ssh打开机器2上的终端,并在机器1上的终端和机器2上的终端显示输出。 示例:我使用下面脚本的变体在machine1上的终端中显示进度条。我想通过机器1的ssh在machine2上打开一个终端,并在machine1上执行的命令中显示进度对话框。

#!bin/bash
#A gauge Box example with dialog
(
c=10
while [ $c -ne 110 ]
do
    echo $c
    echo "###"
    echo "$c %"
    echo "###"
    ((c+=10))
    sleep 1
done
) |
dialog --title "A Test Gauge With dialog" --gauge "Please wait ...." 10 60 0

提前感谢任何有帮助的人。我不是一个优秀的程序员,只是一个思想简单的数学家。

1 个答案:

答案 0 :(得分:5)

您必须使用screen

这是一个神话般的tty模拟器,具有许多功能!

查看man screen

(有点像远程桌面 VNC ,但在角色模式下,所以非常快,我坚持认为:有一个很好的很多功能)

在machine1上:

screen -D -R

这将打开一个新的bash

机器2上的

ssh -t user@machine1 screen -x

machine1 上会话的伪tty用户已共享。

您可以随时关闭窗口或断开与此两个终端中的任何一个的联系,方法是将转义序列设为Control + A,然后点击d

完全可以通过键入screen -x来连接其他地方的其他控制台,或者通过键入screen -D -R而不是screen -x强行断开其他控制台。

(注意不要在屏幕会话中运行screen