我必须从我自己的Ubuntu机器连接到Linux服务器并直接在服务器上运行。 LIST文件中列出了十几个文件夹名称。怎么写...... (像bash脚本?)执行以下程序?
for fold_name in LIST {
/******on my own Ubuntu*******/
-- open 2 new tabs of prompt terminal
-- run an ssh command in both
-- then input passwd and log in automatically in both
/******on the linux server*******/
-- cd to directory xxx/fold_name in both
-- run aaa.exe in 1st tab
-- vim sth in the 2nd tab
}
一旦open-tab-login的循环得到解决,我猜第二部分就是常规的简单bash脚本,除了我不知道如何在两个标签之间指定。
关键是我希望同一终端中的所有选项卡。为此,手动,我经常按Ctrl + Alt + T创建提示,按Ctrl + Shift + T打开其中的许多标签。并且ssh ...... cd ......在每一个中。你看到它是多么烦人和麻烦!
答案 0 :(得分:2)
您可能希望研究一些事情,这会让您更接近。
如果使用ssh密钥,则可以在没有密码的情况下运行ssh。查看ssh-keygen和ssh中的-i
选项。
在gnome-terminal中打开标签可以通过此处描述的方法完成:Open a new tab in gnome-terminal using command line
您可以通过在ssh:ssh user@remotehost aaa.exe
之后包含命令,在ssh上的远程盒子上运行特定命令(例如aaa.exe)。
如果您需要多个命令,请尝试将它们括在引号中:ssh user@remotehost "cd /xxx; aaa.exe"
。在大多数情况下,Vim不需要在相关目录中:ssh user@remotehost vim /xxx/filename"
如果你想做一些互动的事情(比如vim),请在ssh中加入-t
标志。
选项卡将彼此独立 - 我可能在一个窗口中运行一半命令,另一个(例如,在一个窗口中使用一个命令运行aaa.exe,在另一个窗口中运行vim,使用另一个命令,我恰好在同一时间运行。这样我就可以调整窗口的大小,并将它们相对于彼此排列,并立即看到它们。
答案 1 :(得分:1)
-- open 2 new tabs of prompt terminal
这取决于您使用的桌面。对于gnome,gnome-terminal使用-e
选项指定要在新终端窗口中执行的脚本。因此,对于类似这样的事情,您将执行gnome-terminal -e $script &
,将gnome-terminal的每个实例放在后台。
如果您使用其他桌面,则其他终端应用程序通常具有类似选项。因此,您将终端应用程序指向将在终端中运行的脚本,并为您完成剩余的任务。
-- run an ssh command in both
-- then input passwd and log in automatically in both
这会更复杂。经典的解决方案是expect utility。可能有其他类似的工具可以做类似的事情,但expect
几乎是过去这类事情的通常方式。在尝试自动化交互式应用程序时,expect
确实是唯一的出路。不幸的是,expect
使用了一种有点arkane的语法,首次使用的用户通常会感到困惑,难以理解。我抱怨,每当我看到没有其他选择,只能使用expect
自动化某些东西,但这几乎是通常可用的唯一选择。