ondoho,
Thanks for the lead. The script on the fzf page was the solution. The key is you need to call the terminal from inside the script and you need to you you temp variables with named pipes to get everything to work.
I don't have the full script done but here is a proof of concept.
Thanks again to everyone.
Code:
#!/bin/bash
# fzfmenu - fzf as dmenu replacement
input=$(mktemp -u --suffix .fzfmenu.input)
output=$(mktemp -u --suffix .fzfmenu.output)
mkfifo $input
mkfifo $output
TERMINAL_CMD="uxterm -e"
#cat in the values for the first menu from files into pipe
cat ~/.cache/dmenu-recent/all ~/.cache/dmenu-recent/recent > $input &
#create terminal with fzf menu with values from pipe
uxterm -class fzfmenu -T fzfmenu -e sh -c "cat $input | fzf $* | tee $output" & disown
#set variable to value from output pipe
cmd=$(cat $output)
#cat new values into input pipe
cat ~/.cache/knowntypes > $input &
#create terminal with fzf menu with new values from pipe
uxterm -class fzfmenu -T fzfmenu -e sh -c "cat $input | fzf $* | tee $output" & disown
#assignvalue from output pipe to type variable
type=$(cat $output)
#delete temp files
rm -f $input $output
#run command based on selections
[[ "$type" = "background" ]] && exec $cmd
[[ "$type" = "terminal" ]] && exec $TERMINAL_CMD "$cmd"
[[ "$type" = "terminal_hold" ]] && exec $TERMINAL_CMD sh -c "$cmd && echo Press Enter to kill me... && read line"