1

我有一个命令(citrix xenserver cli delete snapshot 命令——如果重要的话),我必须重复很多次:

xe snapshot-uninstall snapshot-uuid=[snapshot-uuid]

我想使用 [snapshot-uuid] 的变量来编写脚本,这样我就可以对文本文件中的所有行重复,看起来像这样(每一行都是唯一的 uuid,没有空格):

dd56e7d2-00b0-4ddd-b3bf-368e3de059f9
ba201e7e-c180-4e00-8134-2ea128c9a14e
32128f38-b1b5-40e7-848c-dbdf5ae255ed
b53145ec-3748-475d-8add-008665533f72
173cb6c4-04da-43bc-abce-f2c97f76d3d2
3829f365-e619-47a0-93cd-d5aca37c28dd
6eb7aff9-70f9-4a77-96b0-044dfb0ce96e
ca7478c6-eae1-4090-aed5-c348b172d12a
439e247d-cf6a-4f09-a4d7-8dc719c317ca
b595d2e8-e2c4-4d0e-9b07-cccf1108904b
1da57650-dc16-48e2-bf5f-e2b8b96dba03
f2718a31-baa8-4c74-b170-5933e71da8c4
b2263c61-175e-43fa-b941-52ec2379a835
d0d6ede9-0589-4908-884f-900fef1d1c92
65e54f20-8c33-4f67-a394-36676add54ac
6d0f388c-5a78-4962-b1b2-55117b18a4c9

另一个复杂的问题是,每个命令都会给出“你确定......输入'yes'继续”。

更新:我最初发布这个问题是因为我在 Citrix 的 Xenserver CLI 论坛上的问题被忽略了。我后来确实在 Citrix 论坛上得到了回复其中包括一个比我尝试做的更有效的命令。请,如果有人需要删除所有快照,请使用以下命令:

for i in `xe snapshot-list --minimal | sed -e 's/,/\ /g'` ; do xe snapshot-uninstall force=true uuid=$i ; done
4

2 回答 2

3

您可以创建一个 shell 脚本来循环遍历每一行:

#!/bin/bash

while read UUID; do
    yes | xe snapshot-uninstall snapshot-uuid="$UUID"
done < uuids.txt

或者,如果您是一名优秀的打字员,您可以直接在 shell 中输入 while 循环的所有三行。

您可以通过管道的输出来自动回答任何提示yesyes将重复打印您选择的字符串(默认为“y”):

姓名

是 - 重复输出一个字符串直到被杀死

概要

yes [STRING]...

描述

重复输出包含所有指定 STRING(s) 或 'y' 的行。

于 2010-11-19T16:44:01.127 回答
1
xargs -I % -a uuidfile xe snapshot-uninstall snapshot-uuid=%

要响应“您确定”提示:

xargs -I % -a sh -c 'yes | uuidfile xe snapshot-uninstall snapshot-uuid=%'
于 2010-11-19T17:31:44.220 回答