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

前端之家收集整理的这篇文章主要介绍了bash – 如何创建新的终端会话并执行多个命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种方法自动启动我的开发环境.我有三个必须启动的虚拟机,然后必须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的终端中执行附加命令?

为简单起见,我试图在每个终端中回显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来执行cmd1和cmd2.它不首先执行cmd1然后将cmd2赋予其结果. ssh是在终端中运行的程序,在完成之前不会执行cmd2.

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

你可以这样做:

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是不够的(尽管有必要). -t为tty分配缓冲区但不为你执行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.

所以你需要的是,执行你的自我.因此:

ssh -t user@address "command_to_execute; bash"
原文链接:https://www.f2er.com/bash/385013.html

猜你在找的Bash相关文章