如何处理 ClearCase -exec 命令字符串中的 shell 元字符?

How do I handle shell metacharacters inside of a ClearCase -exec command string?

背景

我正在尝试将标签为 LABEL_A 的所有文件更新为标签 LABEL_B。现在我正在尝试如下所示的查找命令:

ct find . -version 'lbtype (LABEL_A)' -exec 'cleartool mklabel (LABEL_B) $CLEARCASE_XPN'

当我输入上述命令时,返回以下错误:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `cleartool mklabel (LABEL_B) $CLEARCASE_XPN'

文档内容

当我输入ct man query_language时,关于mklabel的说明如下:

Attach the label EYY6 to the version of test.c that is already labeled EYY5.

UNIX and Linux:

cleartool mklabel -ver '{lbtype(EYY5)}' EYY6 test.c
Created label "EYY6" on "test.c" version "/main/4".

但是,上述文档是针对一个特定文件的情况,我的情况是查看所有文件,并带有旧标签。这引发了我的问题

问题

尝试更新特定标签的所有文件时,mklabel 参数的正确引用是什么?

我认为你的问题是实际上:

问:如何处理 ClearCase -exec 命令字符串中的 shell 个元字符?

答:试试这个:

ct find . -version 'lbtype (LABEL_A)' -exec 'cleartool mklabel \(LABEL_B\) $CLEARCASE_XPN'

注意:

您可能还需要转义“$CLEARCASE_XPN”中的“$”。这取决于 Clearcase 期望的是文字“$CLEARCASE_XPN”还是扩展的 shell 值。

您可以在“CLEARCASE_XPN not parsed as variable in ClearCase command”(2012)

中找到引用政策的示例

但是您还需要考虑 cleartool mklabel 语法本身:不需要 (xxx) 括号:

 ct find . -version 'lbtype(LABEL_A)' -exec 'cleartool mklabel LABEL_B "$CLEARCASE_XPN"'

lbtype 及其开头 ( 之后没有 space。
请参阅

中的示例
  • "Labelling files with spaces in ClearCase" (2014)
  • "How to retrieve the list of files modified across base lines in ClearCase"(也是 2012 年)。
  • "cleartool find"(示例部分)
label type "(LABEL_B)" not found in VOB "/vobs/le_vob"

再次声明:不应使用 ()。 这意味着您需要首先在该 vob:
中创建标签 type (参见“Create label with ClearCase”)

cleartool mklbtype -global -nc lbtype:LABEL_B@/vobs/le_vob

然后重试原来的 find - exec mklabel 命令。