Não vejo como isso funcione. Quando você corre
eval $term_cmd
você abrirá uma janela de terminal e o script não fará mais nada até que você a feche. O que você precisa é:
$term_cmd &
Execute-o em segundo plano (e não use eval
, não é necessário). Então, você também não precisa selecionar a última linha da saída de wmctrl
. Você está definindo o título do terminal, então defina-o como algo único e grep
que:
#!/bin/bash
# This script starts a specified terminal-binary in "Always on Top"-mode
# The assumption is, that 'wmctrl -l' sorts windows with the
# in such a way, that the more recently a window has been created,
# the lower it will be on the list ( compared to windows with the
# same title).
#
# This is my assumption based on a short observation. The window
# ids are probably given out in ascending hex numbers
#
# Note: Using the pid will not help, since all terminals seem to
# be having the same pid
term_title_def='Terminal'
term_title="Terminal_top_$$" ## Use the script's PID for a unique title
term_cmd="mate-terminal --title=$term_title"
## Start terminal. No need to wait, the loop will run until
## the terminal has been opened
$term_cmd &
win_id=''
while [[ -z "$win_id" ]]; do
## No need for '[[:blank:]]' and \$, you are using a unique title,
## keep the regex general.
win_id=$(wmctrl -l | grep "$term_title" | awk '{ print $1 }')
done
# DEBUG
touch /tmp/$win_id
# rename, set as "Always on top"
wmctrl -ir $win_id -T "$term_title_def"
wmctrl -ir $win_id -b add,above
wmctrl -ia $win_id