Я задаюсь вопросом, знает ли кто-либо о способе условно выполнить программу в зависимости от успеха/отказа выхода предыдущей программы. Есть ли какой-либо способ для меня сразу выполнить program2 после program1, если program1 выходит успешно, не тестируя переменную LASTEXITCODE? Я попробовал - полоса и - и операторы напрасно, хотя у меня было чувство, что они не будут работать так или иначе, и лучшая замена является комбинацией точки с запятой и если оператор. Я имею в виду, когда дело доходит до создания пакета несколько автоматически из источника на Linux, && оператор не может быть разбит:
# Configure a package, compile it and install it
./configure && make && sudo make install
PowerShell потребовал бы, чтобы я сделал следующее, предположив, что я мог на самом деле использовать ту же систему сборки в PowerShell:
# Configure a package, compile it and install it
.\configure ; if ($LASTEXITCODE -eq 0) { make ; if ($LASTEXITCODE -eq 0) { sudo make install } }
Несомненно, я мог использовать несколько строк, сохранить его в файле и выполнить сценарий, но идея состоит в том, чтобы это было кратко (сохраните нажатия клавиш). Возможно, это - просто различие между PowerShell и Bash (и даже встроенная командная строка Windows, которая поддерживает && оператор), я должен буду корректироваться к, но если существует более чистый способ сделать это, я хотел бы знать.
Вы можете создать функцию для этого, но я не знаю прямого способа сделать это.
function run-conditionally($commands) {
$ranAll = $false
foreach($command in $commands) {
invoke-command $command
if ($LASTEXITCODE -ne 0) {
$ranAll = $false
break;
}
$ranAll = $true
}
Write-Host "Finished: $ranAll"
return $ranAll
}
Затем назовите это аналогично
run-conditionally(@(".\configure","make","sudo make install"))
Вероятно, есть несколько ошибки там это отключено без удобной среды PowerShell.