11#! /bin/bash
2+ set -e
23
34# Usage:
45# ./run_in_container.sh [--work_dir directory] "COMMAND"
89# ./run_in_container.sh "echo Hello, world!"
910
1011# Default the work directory to WORKSPACE_ROOT_DIR if not provided.
11- WORK_DIR=" ${WORKSPACE_ROOT_DIR} "
12+ WORK_DIR=" ${WORKSPACE_ROOT_DIR:- $(pwd) } "
1213
1314# Parse optional flag.
1415if [ " $1 " = " --work_dir" ]; then
@@ -20,6 +21,8 @@ if [ "$1" = "--work_dir" ]; then
2021 shift 2
2122fi
2223
24+ WORK_DIR=$( realpath " $WORK_DIR " )
25+
2326# Ensure a command is provided.
2427if [ " $# " -eq 0 ]; then
2528 echo " Usage: $0 [--work_dir directory] \" COMMAND\" "
@@ -33,14 +36,14 @@ if [ -z "$WORK_DIR" ]; then
3336fi
3437
3538# Remove any existing container named 'codex'.
36- docker rm -f codex || true
39+ docker rm -f codex 2> /dev/null || true
3740
3841# Run the container with the specified directory mounted at the same path inside the container.
3942docker run --name codex -d \
4043 -e OPENAI_API_KEY \
4144 --cap-add=NET_ADMIN \
4245 --cap-add=NET_RAW \
43- -v " $WORK_DIR :$WORK_DIR " \
46+ -v " $WORK_DIR :/app $WORK_DIR " \
4447 codex \
4548 sleep infinity
4649
@@ -49,4 +52,9 @@ docker exec codex bash -c "sudo /usr/local/bin/init_firewall.sh"
4952
5053# Execute the provided command in the container, ensuring it runs in the work directory.
5154# We use a parameterized bash command to safely handle the command and directory.
52- docker exec codex bash -c " cd \" $WORK_DIR \" && codex --dangerously-auto-approve-everything -q \" $@ \" "
55+
56+ quoted_args=" "
57+ for arg in " $@ " ; do
58+ quoted_args+=" $( printf ' %q' " $arg " ) "
59+ done
60+ docker exec -it codex bash -c " cd \" /app$WORK_DIR \" && codex --full-auto ${quoted_args} "
0 commit comments