Наверняка до sleep 5 выполнение даже не доходит. Это легко проверить, добавив перед ним echo с любой строчкой, или используя шебанг #!/bin/bash -x вместо #!/bin/bash. Тогда решением будет что-то на подобие
Оставляя в стороне некоторую странность запуска gtkdialog именно
таким образом, должен заметить, что утилита timeout уже не первый и не второй год как входит в coreutils. Кроме того, она позволяет по
коду возврата определить, как именно закончилась запускаемая программа и избежать вываливания в stderr запускающего такого:
Подход с бэкграунд-процессом гораздо гибче. Можно прибивать не просто по таймауту, а по условию. Если надо, можно использовать wait $!, получить код возврата, а потом делать что-то ещё.