补充说:我相信这个问题现在包含在这个问题上:Using GNU Screen completely transparently and automatically。
另见这一相关问题:
原题:
如果有一种方法可以将ssh连接到机器并立即重新连接到特定的屏幕会话,那就太好了。你可以这样做:
laptop> ssh server.com screen -ls它将显示在server.com上可用的屏幕列表,如so 1
123.pts-1
456.pts-2然后你可以尝试这样做:
laptop> ssh server.com screen -dr pts-2但这是失败的,说“必须连接到终端。”您必须先在ssh中,然后在server.com上执行"screen server.com pts-2“,如果您有一个片状连接,并且经常断开连接,这是没有好处的。你想要在笔记本电脑上用一个简单的“向上箭头进入”来恢复。(或者让它更加自动化。)
对于这个问题,我有一个草率的解决方案,我将把它作为一个答案,并希望它被否决,以赞成正确的方法来处理这个问题。
脚注:
或者更好的是,如果您使用"screen -S foo“和"screen -S bar”这样的名称创建屏幕会话,那么您将得到一个更友好的列表,如:
123.foo
456.bar并且可以重新连接,例如,"screen -dr foo“。
迷你屏幕教程,包含了这个问题的答案:
登录到server.com并做
screen -S foo 然后就再也不要退出那个会议了。要从其他地方重新连接到它,请执行
ssh -t server.com screen -dr foo列出要重新配置到的可用屏幕:
screen -ls或者,当然,
ssh server.com screen -ls远程查看server.com的可用屏幕。
我现在使用以下别名(tcsh) (基于以下Jason的回答)来连接到指定屏幕(如果存在),或者创建和连接其他名称的屏幕:
alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'发布于 2009-07-02 17:56:10
这现在包含在以下内容中:Using GNU Screen completely transparently and automatically
下面是一个脚本,ssc,它的工作方式与ssh一样,但是使用第三个参数来指定要重新连接到的屏幕或新屏幕的名称。我相信这个剧本包含了最初问题中的所有内容。
#!/usr/bin/env perl
# Use 'ssc' (this script) instead of 'ssh' to log into a remote machine.
# Without a 3rd argument it will list available screens.
# Give it a 3rd argument to attach to an existing screen or specify a new
# screen. Eg, ssc remote.com foo
# The numbers in front of the screen tag can usually be ignored.
# Screen is a little too clever though in that if there's an existing screen "bar"
# and you say "ssc remote.com b" it will reconnect you to "bar" instead of making
# a new screen "b". It's like invisible and silent tab-completion.
if(scalar(@ARGV)==0 || scalar(@ARGV) > 2) {
print "USAGE: ssc remote.com [screen name]\n";
} elsif (scalar(@ARGV) == 1) {
$machine = shift;
@screens = split("\n", `ssh $machine screen -ls`);
for(@screens) {
if(/^\s*(\d+)\.(\S+)\s+\(([^\)]*)\)/) {
($num, $tag, $status) = ($1, $2, $3);
if($status =~ /attached/i) { $att{"$num.$tag"} = 1; }
elsif($status =~ /detached/i) { $att{"$num.$tag"} = 0; }
else { print "Couldn't parse this: $_\n"; }
}
}
print "ATTACHED screens:\n";
for(keys(%att)) { print " $_\n" if $att{$_}; }
print "DETACHED screens:\n";
for(keys(%att)) { print " $_\n" unless $att{$_}; }
} else {
$machine = shift;
$tag = shift;
system("ssh -t $machine \"screen -S $tag -dr || screen -S $tag\"");
}发布于 2009-01-23 23:10:00
使用-t选项可以在直接运行命令时分配终端。
laptop> ssh -t server.com screen -dr pts-2发布于 2009-03-12 18:25:24
我一直在做一些类似的事情,但还没有完全解决,你的解决方案已经解决了我的问题,下面是我的建议:
ssh -t server.com "screen -S foo -rd || screen -S foo"这只是尝试打开名为foo的现有屏幕,如果它不存在,则创建它。我会把这个放在我的笔记本电脑上的发射器里,所以当无线网络运行时,我可以打开我停下来的地方。
刚刚注意到默认的屏幕外壳有点弱,所以设置您的家庭环境的一个改进是:
ssh -t server.com "screen -S foo -rd || screen -S foo bash -l"https://stackoverflow.com/questions/474967
复制相似问题