首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建新的终端会话并执行多个命令

如何创建新的终端会话并执行多个命令
EN

Stack Overflow用户
提问于 2012-07-16 16:32:36
回答 1查看 11.2K关注 0票数 8

我正在寻找一种自动启动我的开发环境的方法。我有三个必须启动的虚拟机,然后必须对每个虚拟机执行ssh操作,并在它们上打开VPN。

到目前为止,我已经让它们启动并设法ssh到它们:

代码语言:javascript
运行
复制
#!/bin/sh 
virsh start virtual_1
virsh start virtual_2
virsh start virtual_3
sleep 2m

gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &
gnome-terminal --title "virtual_2: 11.100" -x ssh root@192.168.11.100 &
gnome-terminal --title "virtual_1: 12.100" -x ssh root@192.168.12.100 &

如何在启动openvpn的每个终端中执行额外的命令?

为了简单起见,我尝试在每个终端上执行echo 1命令,而不是启动VPN。

我发现终端启动上的多个命令可以像这样运行:

代码语言:javascript
运行
复制
gnome-terminal -x bash -c "cmd1; cmd2"

为了简单起见,我对一个终端进行了修改:

代码语言:javascript
运行
复制
gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &

至:

代码语言:javascript
运行
复制
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 ; echo 1" &

但是virtual_3的终端没有打印1,我想,也许在终端还没准备好之前,命令执行得太快了,所以我试着添加&&

代码语言:javascript
运行
复制
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 &&; echo 1" &

但这也没有给出任何结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-16 16:43:15

首先,如果你运行

代码语言:javascript
运行
复制
gnome-terminal -x bash -c "cmd1; cmd2"

您让bash执行cmd1cmd2。它不会先执行cmd1,然后将cmd2赋给它的结果。ssh是一个在终端中运行的程序,您的cmd2在该程序完成之前不会被执行。

所以你需要运行ssh并告诉它来执行你的命令。

您可以通过以下方式执行此操作:

代码语言:javascript
运行
复制
ssh user@address "command_to_execute"

但是,ssh会在命令完成后退出。正如您在"With ssh, how can you run a command on the remote machine without exiting?“中看到的,您可以使用-t选项执行ssh,这样它就不会退出:

代码语言:javascript
运行
复制
ssh -t user@address "command_to_execute"

所以你的命令最后变成:

代码语言:javascript
运行
复制
gnome-terminal --title "virtual_3: server" -x bash -c "ssh -t root@192.168.1.132 'echo 1'"

您是对的,仅给-t是不够的(尽管有必要)。-t会为tty分配缓冲区,但不会为您执行bash。出自ssh手册

-t 强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如在实现菜单服务时。多个-t选项强制分配tty,即使ssh没有本地tty也是如此。

如果指定了command,它将在远程主机上执行,而不是在登录shell上执行。

所以你需要的是,执行bash你自己。因此:

代码语言:javascript
运行
复制
ssh -t user@address "command_to_execute; bash"
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11500649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档