summary refs log tree commit diff
path: root/bin/enter
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2021-04-26 13:17:18 +0200
committerRobert Günzler <r@gnzler.io>2021-04-26 13:17:18 +0200
commitae795bd39751b6c385193c1fc99a0f88e399e2d6 (patch)
treeda98bd950cbc7264d33c1551235c09fabee11e07 /bin/enter
parent9c81d5a7bafed37d5061d9d0dc719fd115abdae9 (diff)
bin/enter: support running without attaching tty
Diffstat (limited to 'bin/enter')
-rwxr-xr-xbin/enter47
1 files changed, 28 insertions, 19 deletions
diff --git a/bin/enter b/bin/enter
index 64e5b68..77d79e3 100755
--- a/bin/enter
+++ b/bin/enter
@@ -10,6 +10,7 @@ opts=
 become=
 verbose=
 cwd=$PWD
+no_tty=
 
 usage() {
 	printf "usage: %s OPTIONS -- [ARGS]\n" "$(basename "$0")"
@@ -22,22 +23,24 @@ usage() {
 	printf "  -B (don't reassign uid/gid)\n"
 	printf "  -v (be verbose)\n"
 	printf "  -c CWD\n"
+	printf "  -T (not tty)\n"
 	printf "\n"
 	printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n"
 	exit 2
 }
 
-while getopts t:i:f:o:c:vBDh o; do
+while getopts t:i:f:o:c:vBDTh o; do
 	case $o in
-	t) 	target="$OPTARG" ;;
-	i) 	img="$OPTARG" ;;
-	f) 	dockerfile="$OPTARG" ;;
-	o)	opts="$OPTARG" ;;
-	c)	cwd="$OPTARG" ;;
-	D)	priv=1 ;;
-	B)	become=1 ;;
-	v)	verbose=1 ;;
-	h|?) 	usage ;;
+		t) target="$OPTARG" ;;
+		i) img="$OPTARG" ;;
+		f) dockerfile="$OPTARG" ;;
+		o) opts="$OPTARG" ;;
+		c) cwd="$OPTARG" ;;
+		D) priv=1 ;;
+		B) become=1 ;;
+		v) verbose=1 ;;
+		T) no_tty=1 ;;
+		h | ?) usage ;;
 	esac
 done
 shift $((OPTIND - 1))
@@ -52,35 +55,41 @@ if [ -z "$img" ]; then
 	# allow setting this to some non-file value to skip building
 	# > enter -i alpine -f none
 	# for a quick alpine based container with $PWD mounted in
-	[ -f "$dockerfile" ] && \
-		docker build --tag="$img" --target="$target" --file="$dockerfile" "$PWD"
+	[ -f "$dockerfile" ] \
+		&& docker build --tag="$img" --target="$target" --file="$dockerfile" "$PWD"
 fi
 
 extra_args=
 [ -n "$become" ] && extra_args="${extra_args} "
-[ -n "$priv"   ] && {
+[ -n "$priv" ] && {
 	extra_args="${extra_args} \
 		--tmpfs=/run --tmpfs=/sys/fs/cgroup \
 		--sysctl=net.ipv4.ip_forward=1 \
 		--security-opt=apparmor:unconfined --security-opt=seccomp:unconfined \
 		--cap-add NET_ADMIN --cap-add SYS_ADMIN --cap-add SYS_RESOURCE \
-		--tmpfs=/var/lib/docker";
+		--tmpfs=/var/lib/docker"
 }
 # make the container transparent
 [ -z "$priv" ] && {
 	extra_args="${extra_args} \
 		--privileged \
-		--mount=type=bind,src=${HOME},target=/home/robert,ro \
-		--network=host";
+		--mount=type=bind,src=${HOME},target=${HOME},ro \
+		--network=host"
 }
 
 [ -n "$opts" ] && extra_args="${extra_args} ${opts}"
 
-[ -z "$become" ] && \
-	extra_args="${extra_args} --user="$(id -u):$(id -g)""
+[ -z "$become" ] \
+	&& extra_args="${extra_args} --user="$(id -u):$(id -g)""
+
+[ -z "$no_tty" ] \
+	&& extra_args="${extra_args} --tty"
 
 ep="sh"
-[ -n "$1" ] && { ep="$1"; shift; }
+[ -n "$1" ] && {
+	ep="$1"
+	shift
+}
 
 [ -n "$verbose" ] && { set -x; }