#!/bin/bash here="$(realpath $(dirname "$0"))" toplevel="$(realpath "$here/../..")" group_args=() docker_args=() for gid in $(id -G); do group_args+=(--group-add "$gid") done if [[ "$1" = -* ]]; then while [[ "$1" != "--" && $# != 0 ]]; do docker_args+=("$1") shift done if [[ "$1" != "--" ]]; then echo "Expected '--' to terminate docker flag list" exit 1 fi shift fi container=$( docker run \ --detach=true \ --network host \ -u "$(id -u):$(id -g)" \ "${group_args[@]}" \ --cap-add SYS_PTRACE \ -v "$PWD:$PWD:z" \ -v "$toplevel:$toplevel:z" \ -v /tmp:/tmp:z \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -v /etc/localtime:/etc/localtime:ro \ -w "$PWD" \ "${docker_args[@]}" \ "$(<"$here/image")" \ "$@" ) kill_it() { if [[ -n "$container" ]]; then docker rm -f "$container" > /dev/null container= fi } trap kill_it SIGTERM SIGINT SIGHUP EXIT docker logs --follow "$container" if [[ -n "$container" ]]; then exitcode="$(docker wait "$container")" else exitcode=99 fi kill_it trap - SIGTERM SIGINT SIGHUP EXIT # after "docker kill", docker wait will not print anything [[ -z "$exitcode" ]] && exitcode=1 exit "$exitcode"