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

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

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

stty: standard input: Invalid argument

我不知道有什么限制禁止运行ct setview通过管道它到shell进程.有帮助吗?

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;
    }
}

解决方法

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

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

>一个确保完成setview,/ vobs / xxx指向右视图中的右侧vob
>一个将使用/ vobs.

由于setview启动了子shell,因此尝试一步完成将主要失败.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...