我正在尝试通过 bash 脚本从多个 Linux 主机获取目录到本地主机。但该hostname
命令显示本地主机而不是远程主机的输出。所有服务器上的目录结构均为:/home/user/HOSTNAME-BCKP。
#!/bin/bash
for i in $(cat hosts);
do
scp -r $i:/home/user/`hostname`-BCKP/home/user/ALL-BCKPs/;
done
答案1
如果您希望hostname
- 命令显示偏僻的hostname,您需要在远程主机上运行它。
您可以将它们读入关联数组并循环遍历:
#!/bin/bash -
declare -A myhosts
for item in $(cat hosts); do
myhosts[$item]="$(ssh $item 'hostname')"
done
for key in "{!myhosts[@]}" ; do
scp -r $key:/home/user/${myhosts[$key]}-BCKP /home/user/ALL-BCKPs/
done
但如果您想多次执行此操作,请考虑创建一个每行包含一对主机和主机名的文件。
您可以在 while 循环中读取它:
while read -r myhost myhostname; do
# do something with $myhost and $myhostname
done < yourfile