在用Perl IPC :: open2打开的shell进程中不能’cleartool setvie
发布时间:2020-12-15 21:14:51 所属栏目:大数据 来源:网络整理
导读:我正在创建一个Perl脚本,除其他外,它设置为ClearCase视图,提供环境,运行综合工具,最后处理输出报告.它通过管道连接到使用IPC :: open2打开的shell进程来实现. 如果我在运行Perl脚本之前手动设置到视图中,它似乎正常工作(cleartool子命令,如pwv工作).但是,当
我正在创建一个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 $sentineln"; while ( my $output = <$readme> ) { last if ( $output =~ /$sentinel/ ); print $output; } } 解决方法
正如我在答案中提到的那样,你看到“
Python and ClearCase setview”,在脚本中使用
setview 通常不是一个好主意.
我知道的唯一解决方案是两个make 2脚本: >一个确保完成setview,/ vobs / xxx指向右视图中的右侧vob 由于setview启动了子shell,因此尝试一步完成将主要失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |