0

好的。我很难过。我有两台计算机,分别称为 machine1 和 machine2。我想在 machine1 上执行一个命令,并将输出通过管道传输到 machine2。这部分很简单,我已经可以做到了。我被难住的是如何在 machine2 上打开一个终端,该终端在机器 1 上显示终端的输出。

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

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

#!/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,conky 读取并显示在 machine2 的屏幕上。当我回到家时,我看到我开始在工作中运行的脚本的状态显示在一个 conky 面板中。

这是实用的——但我想做得更好。

问题 1:我怎样才能修改上面的脚本,以便输出到 machine2 上的 file.txt 并且仍然在 machine1 上输出?我试过使用

tee -a - ???? 

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

问题2:我可以创建类似的效果吗,通过机器1 上的ssh 打开机器2 上的终端,并在机器1 上的终端和机器2 上的终端中显示输出。示例:我使用以下脚本的变体在 machine1 的终端中显示进度条。我想通过 machine1 的 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

提前感谢任何可以提供帮助的人。我不是一个伟大的程序员,只是一个头脑简单的数学家。

4

1 回答 1

5

你必须使用screen

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

看一眼man screen

(有点像远程桌面VNC,但在字符模式下,非常快,我坚持:有很多不错的功能)

在机器 1 上:

screen -D -R

这将打开一个新的bash.

在机器 2 上:

ssh -t user@machine1 screen -x

并且machine1tty上会话的伪用户是共享的。

在任何时候,您都可以关闭窗口或断开与这两个终端中的任何一个的连接,方法是点击转义序列,Control + A然后按d.

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

(注意不要screen从屏幕会话内部运行)

于 2012-12-23T20:19:45.700 回答