diff options
Diffstat (limited to 'tools/docker_exec.sh')
| -rw-r--r-- | tools/docker_exec.sh | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tools/docker_exec.sh b/tools/docker_exec.sh new file mode 100644 index 0000000..66f79bc --- /dev/null +++ b/tools/docker_exec.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +# @describe Execute a shell command inside a sandbox container. +# @option --container! Container name/id to execute in. +# @option --command! Shell command to run (executed via sh -lc inside container). +# @option --timeout_sec Timeout in seconds. Default: 60 + +main() { + local c="${argc_container}" + local cmd="${argc_command}" + local t="${argc_timeout_sec:-60}" + + if ! docker ps --format '{{.Names}}' | grep -qx "$c"; then + echo "ERROR: container not running: $c" >> "$LLM_OUTPUT" + exit 2 + fi + + local out + local rc=0 + out="$(timeout "${t}" docker exec "$c" sh -lc "$cmd" 2>&1)" || rc=$? + + printf '{"exit_code":%d,"output":%s}\n' "$rc" "$(python -c 'import json,sys; print(json.dumps(sys.stdin.read()))' <<<"$out")" >> "$LLM_OUTPUT" +} + +eval "$(argc --argc-eval "$0" "$@")" + |
