如何在ColdFusion rsh命令中更改用户的主要unix组?

时间:2015-09-25 23:43:14

标签: unix coldfusion clearcase rsh

我们使用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>

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

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

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

2 个答案:

答案 0 :(得分:3)

我最终创建了一个launchcheckin.ksh脚本来更改shell中的用户组。我只是将我想要执行的命令作为脚本的参数传递,更改脚本中的组并执行newgrp流中的命令!我们已经在生产中使用了6个月而没有任何障碍。

<强> launchcheckin.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>

答案 1 :(得分:1)

不要使用(作为I explained herecleartool setview:它forks the current shell这就是newgrp和setview无法正常通信的原因:它们会触发自己的shell。

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