我正在使用远程shell。
我有一个包含主机名列表的文件,每个主机名都在一个单独的行上。
例如:
FirstHostName
SecondHostName
ThirdHostName
...
我想浏览文件的每一行,并按ssh [hostname]
输入主机名。然后我将在每个循环中添加一些命令(在它进入之后)。
我该怎么做?假设我可以切换到每个主机名。
我做了一些研究,我知道它应该是这样的:
open(FILE, "hostnames.txt") or die("could not open file");
foreach $line ( <FILE> ) {
...
}
close(FILE);
答案 0 :(得分:1)
你的问题有点不清楚......
如果我们假设您想在每个系统上运行特定命令:
perl -ne 's/^(.*)/ssh \1 some_command/; system $_' < hostnames.txt
或者,如果您想在远程计算机上登录和注销后执行一些perl语句
perl -ne 's/^(.*)/ssh \1/; system $_; statement' < hostnames.txt
一些解释:
perl -ne
在while(<STDIN>) { the_argument; }
循环中运行其后面的参数。因此,它将读取输入中的每一行,将其放在$_
中并执行此操作直到没有更多输入。< hostnames.txt
将文件内容重定向到perl进程的STDIN
(标准输入)s/^(.*)/ssh \1 some_command/
是一个在$_
上运行的正则表达式。第一部分^(.*)
表示“从行首开始的所有字符并记住它们”,ssh \1
表示“ssh后跟我们记住的第一件事”。some_command
在远程计算机上运行,并在完成后立即退出。system $_
执行$_
,好像它包含一个shell命令(现在就是它);
让您使用多个语句作为perl -ne
的单个参数