如何处理 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
命令。
背景
我正在尝试将标签为 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
命令。