#!/usr/bin/env bash

. lib.bash || exit

pids=()
envs=()
args=()

while getopts ":e:p:s:" OPT; do
	case $OPT in
	e) envs+=("$OPTARG");;
	p) pids+=("$OPTARG");;
	*) lib:die_getopts;;
	esac
done

if (( ! ${#envs[@]} )); then
	die 2 "no environment variables specified (use -e)"
fi

if (( ! ${#pids[@]} )); then
	die 2 "no processes specified (use -p)"
fi

for var in "${envs[@]}"; do
	if [[ $var != *=* ]]; then
		var="$var=${!var}"
	fi
	var=$(urlencode -x "$var") || exit
	args+=(-ex "p putenv(\"$var\")")
done

for pid in "${pids[@]}"; do
	info "hacking process $pid"
	do: gdb --batch "${args[@]}" -ex detach -p "$pid"
done
