Salida y scripting
Formato
--output (-o) acepta human (default) o json. Cualquier otro valor se trata como human.
human: tablas y campos alineados, con color. No es estable: puede cambiar entre versiones. No lo parsees.json: el contrato. Es el JSON del objeto que devuelve el kernel (los nombres de campo son los del SDK, por ejemploexecutionId,status), con indentación de dos espacios.
El contrato Renderer
Todo resultado implementa output.Renderer, que en el código es una sola función: Human() string. El JSON sale de encoding/json aplicado al propio resultado; por convención cada resultado define además MarshalJSON() para devolver el objeto del SDK en lugar de su envoltorio. output.Render elige entre las dos según --output.
No todos los comandos pasan por Render: config profile list/show imprimen texto plano a stdout, y apply, config init, config set y el resto de config profile informan por stderr. generate accounts imprime su resumen a stdout sin pasar por Render. En todos ellos -o json no cambia nada.
stdout, stderr y códigos de salida
Con -o json, stdout lleva solo el JSON. Spinner, pasos, avisos, --verbose y la pista de reanudación van por stderr, y con -o json el spinner de espera se silencia.
El código de salida es 0 si el comando terminó bien y 1 ante cualquier error (argumentos inválidos, fallo gRPC, ejecución FAILED_*, timeout). No hay otros códigos.
En un pipeline
id=$(octopus transaction execute system.initial-funds \
--input amount=500000 --input destination="$ACCOUNT" \
--tenant acme-bank --detach -o json | jq -r .executionId)
octopus execution wait "$id" -o json | jq -r .status # SUCCEEDED
execution wait sale con 1 si la ejecución termina en FAILED_FINAL o FAILED_RETRYABLE, así que sirve directo en un set -e.