Как известно, в .desktop-ярлыке необходим полный путь в Exec= для приложения, которое отсутствует в $PATH
Для портабельных приложений есть типичный способ запуска из любого каталога:
Name=Double Commander (portable)
Exec=bash -c 'cd "$(dirname "%k")"; ./doublecmd --config-dir=./'

Предлагаю ещё 2 способа выполнить скрипт, который «вложен» в .desktop-ярлык либо расположен рядом:

# создать из .desktop файла скрипт /tmp/имя_ярлыка.sh, содержащий строки после #!/bin/bash
Exec=bash -c "desk=\\$(echo %k); sh=/tmp/\\$(basename \\${desk// /_} .desktop).sh; sed '/^#!\\/bin\\/bash/,\\$!d;s/^# //' \\"\\$desk\\" >\\$sh; sh \\$sh %F" #список Drag-n Drop файлов
# запустить одноимённый ярлыку скрипт, т.е. путь/имя ярлыка.sh
Exec=bash -c "desk=\\$(echo %k); sh=\\"\\${desk%.desktop}.sh\\"; test -s \\"\\$sh\\" && sh \\"\\$sh\\" || Xdialog –title Script –infobox \\"Скрипт вернул код Ошибки \\$? или \nодноимённый ярлыку скрипт не найден!\\" 0x0 5000"
P.S. bash-код в ярлыке можно не комментировать, если у вас KDE, который обрабатывает в .desktop только валидные строки.
Некоторые окружения Рабочего стола (XFCE и видимо весь Gnome) некорректно запускают .desktop-файлы, выполняя строки, не соответствущие спецификации.

То есть, используя 1 способ, имеем только .desktop-ярлык, который может содержать сложный скрипт.
Потестируйте, может в этом способе есть недостатки? Скрипт для тестирования:
#!/bin/bash

desktop="$HOME/Desktop/bash long.desktop"
# ярлык, запускающий скрипт, на который можно перетаскивать файлы. код закомментирован после строки #!/bin/bash. /tmp/имя_ярлыка.sh создаётся из .desktop файла

sed '/^\[Desktop Entry]/,$!d' "$0" >"$desktop"; chmod ugo+x "$desktop"
kioclient5 exec "$desktop"
exit

[Desktop Entry]
Name=bash script
Type=Application
Icon=application-default-icon
Terminal=0
# создать из .desktop файла скрипт /tmp/имя_ярлыка.sh, содержащий строки после #!/bin/bash
Exec=bash -c "desk=\\$(echo %k); sh=/tmp/\\$(basename \\${desk// /_} .desktop).sh; sed '/^#!\\/bin\\/bash/,\\$!d;s/^# //' \\"\\$desk\\" >\\$sh; sh \\$sh %F" #список Drag-n Drop файлов
# запустиь одноимённый ярлыку скрипт, т.е. путь/имя ярлыка.sh
# Exec=bash -c "desk=\\$(echo %k); sh=\\"\\${desk%.desktop}.sh\\"; test -s \\"\\$sh\\" && sh \\"\\$sh\\" || Xdialog --title Script --infobox \\"Скрипт вернул код Ошибки \\$? или \nодноимённый ярлыку скрипт не найден!\\" 0x0 5000"

#!/bin/bash
# which_ex(){ for temp; do set -- $temp
# 		local exe=$(basename "$(which "$1" 2>/dev/null)" 2>/dev/null)
# 		((${#exe})) && { printf $exe; break;}; done
# }
# BEEP(){ # sound [AF*500 Гц] [.second] [repeat] +sox,alsa-utils
# 	for (( i=1; i <= ${3:-1}; i++ )); do case $(which_ex -one play /bin/beep) in
# 		beep) env -u SUDO_GID -u SUDO_COMMAND -u SUDO_USER -u SUDO_UID /bin/beep || /bin/beep ;;
# 		play) (play -n -c1 synth $(bc<<<"scale=2;${2:-5}/50") sine $[ ${1:-9}*100 ] 2>/dev/null)&
# 			sleep $(bc<<<0.03*${2:-5}) ;;
# 		esac; done
# }
# [[ -n $@ ]] && files="Files:\n$@"
# BEEP; Xdialog --title "include script" --infobox " Execute complete!${files:+\n${files}}" 0x0 5000