【问题标题】:Check if a file is checkedout from clearcase检查文件是否从 clearcase 中签出
【发布时间】:2013-11-07 11:03:36
【问题描述】:

我有一个生成文件,如果该文件尚未签出,我想在其中签出该文件:

VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
build:
     @if ["$(VAR)" == ""]; then \
        cleartool co -unres -nc $(HOME)/all_files.tgz;\
     fi
     @ tar czf $(HOME)/all_files.tgz $(OUT)/*.log

如果 all_files.tgz 被检出,我会收到以下错误:

/bin/sh: [/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10             Rule: CHECKEDOUT: not found

【问题讨论】:

    标签: makefile clearcase


    【解决方案1】:

    当您在 shell 中使用方括号时,您必须在它们周围包含空格。这是因为 [ 实际上是一个单独的命令:如果您使用 ["$(VAR)" 扩展为您在上面引用的字符串 ([/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10) 并且这不是有效的命令名称。最后的]: 周围也必须有空格。

    用途:

    VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
    build:
            @if [ "$(VAR)" == "" ]; then \
                cleartool co -unres -nc $(HOME)/all_files.tgz;\
            fi
            @ tar czf $(HOME)/all_files.tgz $(OUT)/*.log
    

    这是一种奇怪的规则。既然 VAR 只是一个 shell 函数,而且你在 shell 中使用它,为什么还要费心使用$(shell ...)

    【讨论】:

    • +1。最近 bash 脚本写得太多,makefile 不够用。
    • ifeq ($(strip $(VAR)),) xxx endif 是否也可以在 Makefile 中工作以测试 var 是否为空?
    • 是的,如果可以在解析 makefile 时预先运行检查,那也可以。 georgiana 提供的示例推迟了检查,因此直到很久以后才会发生,那时build 目标配方将被运行。这可能是一个重要的区别,也可能不是(我们无法判断,因为我们没有完整的信息)。
    • 感谢您的帮助(使用单个 '=':@if [ "$(VAR)" = "" ];)。调用构建目标时会延迟变量 VAR。
    • 对,错过了...== 是一些 shell 支持的扩展,例如bash,但不是全部。 shell 测试程序中相等的 POSIX 标准运算符是=
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2021-07-21
    • 2017-09-06
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多