diff --git a/etc/terminal-run b/etc/terminal-run index a25f881..42b6541 100755 --- a/etc/terminal-run +++ b/etc/terminal-run @@ -2,48 +2,91 @@ #$1 is the command to be run. #$2 is the title. +commands="$1" +title="$2" -#set to 1 to display which terminal is being used -DEBUG=0 +#set DEBUG variable to 1 to display which terminal is being used +[ -z "$DEBUG" ] && DEBUG=0 + +#add a line to the terminal's command-to-run that saves the terminal's PID to a known filename +temp_pid_file="$(mktemp -u)" +commands="echo "\$""\$" > $temp_pid_file +$commands" + +function error { + echo -e "\e[91m$1\e[39m" + exit 1 +} if [ -f /usr/bin/lxterminal ];then - lxterminal --title="$2" -e bash -c "$1" + lxterminal --title="$title" -e bash -c "$commands" & [ $DEBUG == 1 ] && echo lxterminal elif [ -f /usr/bin/xfce4-terminal ];then - xfce4-terminal --title="$2" -x bash -c "$1" + xfce4-terminal --title="$title" -x bash -c "$commands" & [ $DEBUG == 1 ] && echo xfce4-terminal elif [ -f /usr/bin/mate-terminal ];then - #mate-terminal --title="$2" -e "bash -c "\""$1"\""" - mate-terminal --title="$2" -x bash -c "$1" + mate-terminal --title="$title" -x bash -c "$commands" & [ $DEBUG == 1 ] && echo mate-terminal elif [ -f /usr/bin/xterm ];then - xterm -T "$2" -e bash -c "$1" + xterm -T "$title" -e bash -c "$commands" & [ $DEBUG == 1 ] && echo xterm elif [ -f /usr/bin/konsole ];then - konsole -p tabtitle="$2" -e bash <(echo "$1") + konsole -p tabtitle="$title" -e bash <(echo "$commands") & [ $DEBUG == 1 ] && echo konsole elif [ -f /usr/bin/terminator ];then - terminator -T "$2" -x bash -c "$1" + terminator -T "$title" -x bash -c "$commands" & [ $DEBUG == 1 ] && echo terminator elif [ -f /usr/bin/gnome-terminal ];then - gnome-terminal --title "$2" -x bash -c "$1" + gnome-terminal --title "$title" -x bash -c "$commands" & [ $DEBUG == 1 ] && echo gnome-terminal elif [ -f /usr/bin/qterminal ];then - qterminal -e bash <(echo "$1") + qterminal -e bash <(echo "$commands") & [ $DEBUG == 1 ] && echo qterminal elif [ -f /usr/bin/x-terminal-emulator ];then - $(readlink -f /usr/bin/x-terminal-emulator) -e bash -c "$1" + $(readlink -f /usr/bin/x-terminal-emulator) -e bash -c "$commands" & [ $DEBUG == 1 ] && echo x-terminal-emulator else echo "Failed to locate any terminal emulators!!!" exit 1 -fi \ No newline at end of file +fi + +#A terminal should now be launching and in a few seconds the pid file should appear +if [ ! -z "$temp_pid_file" ];then + #echo "Waitng for terminal to close..." + #wait until pid file exists and give up in 5 seconds + attempts=0 + while [ ! -f "$temp_pid_file" ];do + + if [ "$attempts" -gt 5 ];then + error "terminal-run: No terminal detected as it never created the pid file within 5 seconds." + fi + sleep 1 + attempts=$((attempts + 1)) + done #pid file now exists + terminalrun_pid="$(cat "$temp_pid_file")" + + #now, wait until the pid stops (terminal closes) + while [ -d /proc/${terminalrun_pid} ];do + sleep 1 + done + rm -f "$temp_pid_file" + +fi + + + + + + + + +