我想是这样的:
use IPC::Run qw( run );
run [ "wrapped.pl", @array ],
'>>', $fileresult;
die("wrapped.pl killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("wrapped.pl exited with error ".( $? >> 8 )."\n") if $ ?>> 8;
->与状态文件无交互use IPC::Open3 qw( open3 );
open(local *CHILD_STDIN, '<', '/dev/null')
or die("Can't open \"/dev/null\": $!\n");
open(local *CHILD_STDOUT, '>>', $fileresult)
or die("Can't append to \"$fileresult\": $!\n");
my $pid = open3('<&CHILD_STDIN', '>&CHILD_STDOUT', '>&STDERR',
"wrapped.pl", @array);
waitpid($pid, 0);
die("Can't execute wrapped.pl: $!\n") if $? == -1;
die("wrapped.pl killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("wrapped.pl exited with error ".( $? >> 8 )."\n") if $ ?>> 8;
-> 读取状态文件terraform init
-> 读取和写入状态文件这个假设正确吗?
此外,何时套写状态?在基础命令完成之前还是之后?
答案 0 :(得分:0)
是的,这是主要命令的不同状态交互的高级概述。如果您正在使用远程状态,则init确实会与其进行交互以确保它可以访问它。由于Terraform可能会因部分运行的脚本而失败,因此您可以确定Terraform在每个资源被更新/创建时都处于写入状态。这样一来,状态就反映出当前成功的情况。如果您在资源用完之前终止了Terraform运行,则状态不会更新。