在Bash中循环使用参数列表:如何?
这更像是一个理论问题,但假设我有一个主Rsync脚本,我想用它将多个远程主机备份到同一个目标 我想让脚本读取一个文本文件,每行包含主机名、源、目标,如下所示:在Bash中循环使用参数列表:如何?,bash,shell,rsync,Bash,Shell,Rsync,这更像是一个理论问题,但假设我有一个主Rsync脚本,我想用它将多个远程主机备份到同一个目标 我想让脚本读取一个文本文件,每行包含主机名、源、目标,如下所示: host-one.example.com /Volumes/data /Volumes/host-one-backup host-two.example.com /Volumes/Users /Volumes/host-two-backup host-three.example.com /Volume/apps /Volumes/host
host-one.example.com /Volumes/data /Volumes/host-one-backup
host-two.example.com /Volumes/Users /Volumes/host-two-backup
host-three.example.com /Volume/apps /Volumes/host-three-backup
然后是一个简单的Rsync脚本,它将相应地弹出三个值中的每一个,运行该Rsync作业,然后转到循环脚本中的下一个,等等
除了如何在脚本中将这三个值作为变量读取外,我什么都擅长
非常感谢您的想法或建议
干杯,丹,读主机名源目标;做
while read hostname source destination; do
rsync -a "$hostname:$source" "$destination"
done < backup-list.txt
rsync-a“$hostname:$source”“$destination”
完成
最酷/棘手的部分是将整个循环视为一个复合命令,并对其应用重定向。这会导致每次
read
调用从文件中读取一行,因为stdin在循环期间被重定向。如果这么简单,我会感到尴尬,但很高兴我问了!让我来试一试……嘿,约翰,这似乎奏效了——感谢大家提出了如此简单而优雅的解决方案。只是好奇我怎么能读取由垂直管道或其他字符分隔的值?我也解决了最后一个问题:while IFS='|'read-r hostname source destination;do rsync-a“$hostname:$source”“$destination”done