gpt4 book ai didi

bash - 如何创建一个新的终端 session 并执行多个命令

转载 作者:行者123 更新时间:2023-11-29 08:54:46 24 4
gpt4 key购买 nike

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

到目前为止,我已经让他们启动并设法通过 ssh 访问他们:

#!/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。

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

gnome-terminal -x bash -c "cmd1; cmd2"

所以为了让一个终端保持简单,我改变了:

gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &

到:

gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 ; echo 1" &

但是 1 并没有在 virtual_3 的终端打印出来。然后我想,也许在终端准备好之前命令执行得太快了,所以我尝试添加 &&:

gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 &&; echo 1" &

但这也没有结果。

最佳答案

首先,如果你运行

gnome-terminal -x bash -c "cmd1; cmd2"

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

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

您可以通过以下方式做到这一点:

ssh user@address "command_to_execute"

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

ssh -t user@address "command_to_execute"

所以最后你的命令变成了:

gnome-terminal --title "virtual_3: server" -x bash -c "ssh -t root@192.168.1.132 'echo 1'"

你是对的,单独给出 -t 是不够的(尽管有必要)。 -ttty 分配缓冲区但不为您执行 bash。摘自 ssh 手册:

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

If command is specified, it is executed on the remote host instead of a login shell.

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

ssh -t user@address "command_to_execute; bash"

关于bash - 如何创建一个新的终端 session 并执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com