我想在Solaris 10中的多个服务器中搜索不同的包。一个文件包含包信息,另一个文件包含服务器信息。
我试过这个:
bash-3.00# cat pk
"VRTSvcs|VRTSvxfen"
"SUNWfmd|SUNWfsmgtr"
bash-3.00# cat ser
mokshi
niki
这是我的剧本:
bash-3.00# cat tt
#!/usr/bin/bash
>output
for j in `cat ser`
do
for ip in `cat pk`
do
M=`ssh $j "pkginfo |egrep $ip |cut -d \" \" -f7 "`;
echo "$j " >>output
echo "$M" >>output
done
done
预期输出
cat output
bash-3.00# cat output
moksha
VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen
niki
SUNWfmd
SUNWfmdr
SUNWfsmgtr
但是当我运行脚本时,它会像这样运行两次:
bash-3.00# bash -x tt
++ cat ser
+ for j in '`cat ser`
'
++ cat pk
+ for ip in '`cat pk`'
++ ssh mokshi 'pkginfo |egrep "VRTSvcs|VRTSvxfen" |cut -d " " -f7 '
Password:
+ M='VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen'
+ echo 'mokshi '
+ echo 'VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen'
+ for ip in '`cat pk`'
++ ssh mokshi 'pkginfo |egrep "SUNWfmd|SUNWfsmgtr" |cut -d " " -f7 '
Password:
+ M='SUNWfmd
SUNWfmdr
SUNWfsmgtr'
+ echo 'mokshi '
+ echo 'SUNWfmd
SUNWfmdr
SUNWfsmgtr'
+ for j in '`cat ser`'
++ cat pk
+ for ip in '`cat pk`'
++ ssh niki 'pkginfo |egrep "VRTSvcs|VRTSvxfen" |cut -d " " -f7 '
Password:
+ M='VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen'
+ echo 'niki '
+ echo 'VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen'
+ for ip in '`cat pk`'
++ ssh niki 'pkginfo |egrep "SUNWfmd|SUNWfsmgtr" |cut -d " " -f7 '
Password:
+ M='SUNWfmd
SUNWfmdr
SUNWfsmgtr'
+ echo 'niki '
+ echo 'SUNWfmd
SUNWfmdr
SUNWfsmgtr'
我得到这样的输出:
bash-3.00# cat output
moksha
VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen
moksha
SUNWfmd
SUNWfmdr
SUNWfsmgtr
niki
VRTSvcs
VRTSvcsag
VRTSvcsea
VRTSvxfen
niki
SUNWfmd
SUNWfmdr
SUNWfsmgtr
该脚本的主要目标是从服务器文件中获取一个服务器,并且必须在包文件中搜索第一行。它必须从服务器名称中获取第二个服务器名称,并在包文件中搜索第二行。
请在我犯错的地方帮助我。
答案 0 :(得分:2)
您可以这样做 - 假设您的服务器和包文件中的行数相同:
#!/usr/bin/env bash
while read -u 3 -r server && read -u 4 -r pkg; do
m=$(ssh -n "$server" "pkginfo | egrep '$pkg' | cut -d' ' -f7")
echo "$server"
echo "$m"
done 3<ser 4<pk >> output
3<ser
将fd 3连接到文件ser
,4<pk
将fd 4连接到文件pk
read -u 3
从文件描述符3读取,read -u 4
从文件描述符4读取$()
优于后退(请参阅下面的帖子以查找原因)cut -d' '
- &gt;猜你的分隔符是一个空格ssh -n
是必需的,以便ssh
忽略标准输入并且不会干扰read
>> output
放在最后以获得更高效的I / O 另见: