在用Perl IPC :: open2打开的shell进程中不能'cleartool setview'

时间:2013-08-26 22:46:04

标签: perl shell clearcase

我正在创建一个Perl脚本,除其他外,它设置为ClearCase视图,提供环境,运行综合工具,最后处理输出报告。它通过管道连接到使用IPC::open2打开的shell进程来实现。

如果我在运行Perl脚本之前手动设置了视图,它似乎正常工作(cleartool子命令,如pwv工作)。但是,当我在脚本中运行$ct setview anassar_$proj时,它会显示以下错误消息:

stty: standard input: Invalid argument

我不知道有任何限制禁止通过将它传递给shell进程来运行ct setview。有什么帮助吗?

my ( $readme, $writeme );
# Open the default shell and hook to its stdin and stdout.
my $pid = open2( $readme, $writeme, "$ENV{SHELL}" ) or
   croak "Cannot open IPC handles to $ENV{SHELL}\n";


runCmd("$ct pwv");
runCmd("$ct setview anassar_$proj");
runCmd("$ct pwv");
runCmd('source  /vobs/blah/blah/blah/env.csh');
runCmd('echo env_var1 = $env_var1');
runCmd('echo env_var2 = $env_var2');
runCmd('echo env_var3 = $env_var3');
runCmd('exit'); # Exit from ClearCase View
runCmd('exit'); # Exit from shell.


sub runCmd {
    my ( $cmd ) = @_;
    my $sentinel = '___SOME_STRING_THAT_CANNOT_OCCUR_IN_OUTPUT___';

    print $writeme "$cmd && echo $sentinel\n";

    while ( my $output = <$readme> ) {
        last if ( $output =~ /$sentinel/ );
        print $output;
    }
}

1 个答案:

答案 0 :(得分:1)

正如我在答案中提到的那样,“Python and ClearCase setview”,在脚本中使用setview通常不是一个好主意。

我所知道的唯一解决方案是两个make 2脚本:

  • 确保完成setview,/vobs/xxx引用右视图中的右侧vob
  • 将使用/vobs

由于setview启动了子shell,因此尝试一步完成所有操作都将失败。