# generate something random to make an attacker's job harder
pipe=$(uuidgen)
# use that randomly-generated sigil in place of | in our array
cmd_array=(
ls -a /
"$pipe" grep "home"
)
exec_array_pipe() {
local arg cmd_q
local -a cmd=( )
while (( $# )); do
arg=$1; shift
if [[ $arg = "$pipe" ]]; then
# log an eval-safe copy of what we're about to run
printf -v cmd_q '%q ' "${cmd[@]}"
echo "Starting pipeline component: $cmd_q" >&2
# Recurse into a new copy of ourselves as a child process
"${cmd[@]}" | exec_array_pipe "$@"
return
fi
cmd+=( "$arg" )
done
printf -v cmd_q '%q ' "${cmd[@]}"
echo "Starting pipeline component: $cmd_q" >&2
"${cmd[@]}"
}
exec_array_pipe "${cmd_array[@]}"
IyBnZW5lcmF0ZSBzb21ldGhpbmcgcmFuZG9tIHRvIG1ha2UgYW4gYXR0YWNrZXIncyBqb2IgaGFyZGVyCnBpcGU9JCh1dWlkZ2VuKQoKIyB1c2UgdGhhdCByYW5kb21seS1nZW5lcmF0ZWQgc2lnaWwgaW4gcGxhY2Ugb2YgfCBpbiBvdXIgYXJyYXkKY21kX2FycmF5PSgKICBscyAtYSAvCiAgIiRwaXBlIiBncmVwICJob21lIgopCgpleGVjX2FycmF5X3BpcGUoKSB7CiAgbG9jYWwgYXJnIGNtZF9xCiAgbG9jYWwgLWEgY21kPSggKQogIHdoaWxlICgoICQjICkpOyBkbwogICAgYXJnPSQxOyBzaGlmdAogICAgaWYgW1sgJGFyZyA9ICIkcGlwZSIgXV07IHRoZW4KICAgICAgIyBsb2cgYW4gZXZhbC1zYWZlIGNvcHkgb2Ygd2hhdCB3ZSdyZSBhYm91dCB0byBydW4KICAgICAgcHJpbnRmIC12IGNtZF9xICclcSAnICIke2NtZFtAXX0iCiAgICAgIGVjaG8gIlN0YXJ0aW5nIHBpcGVsaW5lIGNvbXBvbmVudDogJGNtZF9xIiA+JjIKICAgICAgIyBSZWN1cnNlIGludG8gYSBuZXcgY29weSBvZiBvdXJzZWx2ZXMgYXMgYSBjaGlsZCBwcm9jZXNzCiAgICAgICIke2NtZFtAXX0iIHwgZXhlY19hcnJheV9waXBlICIkQCIKICAgICAgcmV0dXJuCiAgICBmaQogICAgY21kKz0oICIkYXJnIiApCiAgZG9uZQogIHByaW50ZiAtdiBjbWRfcSAnJXEgJyAiJHtjbWRbQF19IgogIGVjaG8gIlN0YXJ0aW5nIHBpcGVsaW5lIGNvbXBvbmVudDogJGNtZF9xIiA+JjIKICAiJHtjbWRbQF19Igp9CgpleGVjX2FycmF5X3BpcGUgIiR7Y21kX2FycmF5W0BdfSI=