【发布时间】:2013-12-27 11:41:06
【问题描述】:
我的 bash 脚本有问题。我逐行读取变量lvm_path_exec,它有效。我用 echo "lvmpath" 确认了它。 但是一旦我将 sshpass 命令放入 while 语句中,脚本只会处理被 grepped 的第一行。
如果没有 sshpass 命令,lvmpath_exec 的所有行都会得到处理。
你看到错误了吗?
lvmpath_exec=$(sshpass -p "${password[$i]}" ssh ${user[$i]}@${ip[$i]} -p ${port[$i]} lvdisplay | grep datatest -A 3 | grep Path | awk '{ print $3 }')
echo "$lvmpath_exec" | while read lvmpath
do
lvmname=datatest
snap=_snapshot
snapname=$lvmname$snap
lvcreate=$(sshpass -p "${password[$i]}" ssh ${user[$i]}@${ip[$i]} -p ${port[$i]} lvcreate -L20G -s -n $snapname $lvmpath)
snap_path=$(sshpass -p "${password[$i]}" ssh ${user[$i]}@${ip[$i]} -p ${port[$i]} lvdisplay | grep $snapname -A 3 | grep Path | awk '{ print $3 }')
transfer=$(sshpass -p "${password[$i]}" ssh ${user[$i]}@${ip[$i]} -p ${port[$i]} "dd if=$snap_path | gzip -c" > /tmp/$snapname)
delsnap=$(sshpass -p "${password[$i]}" ssh ${user[$i]}@${ip[$i]} -p ${port[$i]} lvremove -f $snap_path)
done
更新
我修复了它: 替换
echo "$lvmpath_exec" | while read lvmpath
与
for lvmpath in $lvmpath_exec
但它不应该在读时也能工作吗?
【问题讨论】:
标签: bash while-loop