2

我们使用 rsh 命令将文件检入 ClearCase:

<cfexecute name="C:\cygwin64\bin\rsh.exe"
    arguments="-n -l #USERNAME# #SERVER# ""cleartool setview -exec '#KSH_FILE# -user #USERNAME# -dir #VOB_DIRECTORY#' #CLEARCASE_VIEW#"" "
    timeout="180"
    variable="CHECKIN_FILE_CONTENT">
</cfexecute>

但是遇到了一个问题,即用户的主要 unix 组设置为与用户尝试将文件签入的 VOB 不同的组。

我需要newgrp在执行之前运行一个命令#KSH_FILE#

我确信这会起作用:

<cfexecute name="C:\cygwin64\bin\rsh.exe"
    arguments="-n -l #USERNAME# #SERVER# ""newgrp #GROUP#; cleartool setview -exec '#KSH_FILE# -user #USERNAME# -dir #VOB_DIRECTORY#' #CLEARCASE_VIEW#"" "
    timeout="180"
    variable="CHECKIN_FILE_CONTENT">
</cfexecute>

但它一直超时..没有错误,只是旋转和停止。

---更新---经过进一步测试,cfexcute 和 rsh 似乎不允许使用多个命令。这是我尝试过的示例测试,它产生了相同的问题:

<cfexecute name="C:\cygwin64\bin\rsh.exe"
    arguments="-n -l #USERNAME# #SERVER# ""newgrp #GROUP#; id -a > results.txt"" "
    timeout="180">
</cfexecute>
4

2 回答 2

3

我最终创建了一个launchcheckin.ksh脚本来更改 shell 中的用户组。我只是将要执行的命令作为参数传递给脚本,更改脚本中的组并执行 newgrp 流中的命令!我们已经在生产中顺利完成了 6 个月。

启动检查.ksh

FILE="$1"
GROUP="$2"
COUNT=1
for argument in $*
  do
    if [ ${COUNT} -gt 2 ]
      then
        ARGUMENTS="${ARGUMENTS} ${argument}"
      fi
    ((COUNT+=1))
done

newgrp ${GROUP} << EOF
${FILE} ${ARGUMENTS}
EOF

更新命令

<cfexecute name="C:\cygwin64\bin\rsh.exe"
    arguments="-n -l #USERNAME# #SERVER# ""cleartool setview -exec '/launchcheckin.ksh #KSH_FILE# #GROUP# #ARGUMENTS#' #CLEARCASE_VIEW#"" "
    timeout="180"
    variable="CHECKIN_FILE_CONTENT">
</cfexecute>
于 2016-05-04T21:27:34.813 回答
1

不要使用(正如我在这里解释的那样)cleartool setview:它分叉了当前的 shell,这就是 newgrp 和 setview 不能很好地通信的原因:它们触发了自己的 shell。

如果您需要对动态视图执行任何操作,请使用其完整路径 ( /view/<aview>/vobs/<avob>),不要使用setview. 这样,您可以newgrp根据需要使用。

于 2015-09-25T23:56:07.153 回答