2009-12-03 122 views
1

从Linux上开始玩bash,我试图对其他clearcase操作产生的所有文件执行clearcase操作。换句话说,我想检查所有检出的文件。流水线vs

列出签出文件的命令是:cleartool lsco -short -rec。 检入文件的命令是:cleartool ci -nc filename

我能够做到这一点使用下面的for循环:

for f in 'cleartool lsco -short -rec.'; do cleartool ci -nc $f; done 

我想知道如果有其他办法可以做到,使用管道?像这样的:

cleartool lsco -short -rec . | cleartool ci -nc 

这里的问题是,cleartool不读取stdin,但期望一个参数,正确?

+0

感谢您的编辑,我不明白关于代码空间缩进的建议..我没有想到它会为我设置代码格式 – 2009-12-03 13:12:00

+0

我发现ClearCase让您跳跃到这样的环节变得残酷和奇怪执行这样普通的操作。 – 2009-12-03 13:49:39

回答

1
cleartool ci -nc `cleartool lsco -short -rec .` 
+0

此解决方案的工作原理是,在linux中默认情况下,不超过65536个命令行参数的最大数量。 – corvus 2009-12-03 13:16:33

+0

有趣的是,我有一些非常类似于工作中的shell别名。 – 2009-12-03 13:17:30

3

是的,正确的。

在一般情况下,你可以将“每行一个参数列表,如通过管道来”到“的争论都在同一条线上,如在命令调用列表”使用xargs

理查德还指出了一种更直接使用shell替换的方法。

$ cleartool lsco -short -rec . | xargs cleartool ci -nc 
0

我在我的.bashrc定义这两个函数:

$ cico() { ct lsco -me -cview -short ${@} | enquote | xargs cleartool ci -nc; } 
$ cicor() { ct lsco -me -r -cview -short ${@} | enquote | xargs cleartool ci -nc; } 

Enquote是:

$ enquote() { /usr/bin/sed 's/^/"/;s/$/"/' ; } 

您需要的是-Me,如果你-cview开始与其他人共同开展一个项目,因为默认情况下,lsco会将每个人的签出文件以及您签出的文件显示给不同的视图。

通常,您要查找的主要命令是xargs。