У меня есть это:
try { run 'tar', '-zxvf', $path.Str, "$dir/META6.json", :err }
Несмотря на то, что она находится в блоке try{}, эта строка по-прежнему вызывает сбой моего скрипта:
The spawned command 'tar' exited unsuccessfully (exit code: 1, signal: 0)
in block at ./all-versions.raku line 27
in block at ./all-versions.raku line 16
in block <unit> at ./all-versions.raku line 13
Почему блок try{} не позволяет продолжить выполнение скрипта и как его продолжить?
Это потому, что run не подвел (пока). run возвращает объект Proc. И это само по себе не бросает (пока).
Try просто возвращает этот Proc объект. Однако, как только возвращаемое значение используется (например, в результате его потопления), оно сбрасывается.
Сравните (с немедленным затоплением):
$ raku -e 'run "foo"'
The spawned command 'foo' exited unsuccessfully (exit code: 1, signal: 0)
С:
$ raku -e 'my $a = run "foo"; say "ran, going to sink"; $a.sink'
ran, going to sink
The spawned command 'foo' exited unsuccessfully (exit code: 1, signal: 0)
Теперь неясно, что вызывает использование объекта Proc в вашем коде. Вы должны показать больше кода.
Один из способов проверить успех — проверить код выхода:
$ raku -e 'my $a = run "foo"; say "failed" if $a.exitcode > 0'
failed
$ raku -e 'my $a = run "echo"; say "failed" if $a.exitcode > 0'
Или, альтернативно, используйте решение Джонатана:
$ raku -e 'try sink run "foo"'
Возможно, стоит предложить try sink run '...', что является решением «мне все равно, почему это не удается, просто игнорируйте это», которое, вероятно, изначально было нужно.