我有一个包含如下id列表的文本文件,我需要在每个id上运行下面的命令,在awk中有没有更简单的方法?
ssh -p 29418 company.com gerrit review --code-review 2 -- file.txtfile.txt包含以下内容:
297003
297002
297001
...只要file.text中存在id,就应该运行以下命令
ssh -p 29418 company.com gerrit review --code-review 2 -- 297003
ssh -p 29418 company.com gerrit review --code-review 2 -- 297002
ssh -p 29418 company.com gerrit review --code-review 2 -- 297001
.....发布于 2013-04-27 03:28:24
Awk不是我想要的工具。我建议使用xargs:
xargs -I% -n1 < file ssh -p 29418 company.com gerrit review --code-review 2 -- %%字符是使用-I选项设置的替换字符串,但是,在本例中,替换字符串位于命令的末尾,因此不需要显式声明,因为默认情况下,xargs仅附加到末尾:
xargs -n1 < file ssh -p 29418 company.com gerrit review --code-review 2 --提示是在实际运行之前使用echo命令查看输出:
# -------------- notice we run echo not ssh to see the output before we rut it
xargs -n1 < file echo ssh -p 29418 company.com gerrit review --code-review 2 --
ssh -p 29418 company.com gerrit review --code-review 2 -- 297003
ssh -p 29418 company.com gerrit review --code-review 2 -- 297002
ssh -p 29418 company.com gerrit review --code-review 2 -- 297001如果没有-n1选项,xargs将传递所有值,这些值对于此特定情况可能有用,也可能无效,具体取决于gerrit的用法:
xargs < file echo ssh -p 29418 company.com gerrit review --code-review 2 --
ssh -p 29418 company.com gerrit review --code-review 2 -- 297003 297002 297001发布于 2013-04-27 03:26:37
while read sshid
do
ssh -p $sshid ...
done < file.txt发布于 2013-04-29 00:11:00
我将使用while循环对每个值执行操作,并将$i的值设置为包含值列表的文件的read的输出。
while read i
do
ssh -p 29418 company.com gerrit review --code-review 2 -- $i
done < filename正如sudo_O所说的,您可以使用echo命令在尝试运行实际代码之前检查生成的命令。
while read i
do
echo "ssh -p 29418 company.com gerrit review --code-review 2 -- $i"
done < filenamehttps://stackoverflow.com/questions/16243757
复制相似问题