ClearCase命令不会在脚本中运行

时间:2013-04-17 18:16:29

标签: unix clearcase ksh

我正在尝试通过ksh脚本自动执行ClearCase签到。存在一个奇怪的问题,即以下命令在自动化脚本的一部分时不会运行,但如果我将其粘贴到命令行中则运行正常。

脚本片段:

for dir in `cat $DIRS`
do
    RUNCMD="cleartool find <<vob_directory>>/$dir -type f -exec 'cleartool co -nc \$CLEARCASE_PN'"
    print $RUNCMD
    $RUNCMD
done
exit 1

生成以下命令

cleartool find <<vob_directory>> -type f -exec 'cleartool co -nc $CLEARCASE_PN'

这是错误

cleartool: Error: Extra arguments: "co"
Usage: find { pname ... [-depth | -nrecurse | -directory]
        | [pname ...] -all [-visible | -nvisible]
        | -avobs [-visible | -nvisible]
        }
        [-name 'pattern']
        [-cview]
        [-user login-name]
        [-group group-name]
        [-type {f|d|l}...]
        [-follow]
        [-kind object-kind]
        [-nxname]
        [-element query]
        [-branch query]
        [-version query]
        {-print | -exec command-invocation | -ok command-invocation} ...

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

虽然ksh {我的第一次测试位于bash),但您推荐的eval solution更常见(bash eval is a bit different)。

您可以在clearcase multisite script中看到它 如果您需要将结果存储在变量中进行处理,可以按照this question

进行操作
for dir in `cat $DIRS`
do
    RUNCMD="cleartool find <<vob_directory>>/$dir -type f -exec 'cleartool co -nc \$CLEARCASE_PN'"
    print $RUNCMD
    eval "res=\$( $RUNCMD )"
    print $res
done
exit 1

原始答案:

您可能希望添加some quotes,以防止shell过早扩展您的命令,例如this example

RUNCMD="cleartool find <<vob_directory>>/$dir -type f -exec "'cleartool co -nc \$CLEARCASE_PN'""

甚至用双引号(例如this thread

对单引号进行查询
RUNCMD="cleartool find <<vob_directory>>/$dir -type f -exec "cleartool co -nc \"\$CLEARCASE_PN\""

(请注意\"周围的“\$CLEARCASE_PN”,以便考虑其中包含空格的路径名称。

答案 1 :(得分:1)

我无法说出为什么这样有效,但是一位同事告诉我eval。结果证明了这一点。

for dir in `cat $DIRS`
do
    RUNCMD="cleartool find <<vob_directory>>/$dir -type f -exec 'cleartool co -nc \$CLEARCASE_PN'"
    print $RUNCMD
    eval $RUNCMD
done
exit 1