#!/bin/bash log.warn() { echo -e "[\e[33mWARN\e[0m]: \e[1m$*\e[0m"; } log.error() { echo -e "[\e[31mERROR\e[0m]: \e[1m$*\e[0m"; } log.info() { echo -e "[\e[96mINFO\e[0m]: \e[1m$*\e[0m"; } log.debug() { echo -e "[\e[32mDEBUG\e[0m]: \e[1m$*\e[0m"; } function scan_desktop_file_log(){ unset desktop_file_path package_name=$1 for desktop_file_path in $(dpkg -L "$1" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then log.info "$desktop_file_path is found." fi done for desktop_file_path in $(dpkg -L "$1" |grep /opt/apps/$package_name/entries/applications/ | awk '/\.desktop$/ {print}'); do if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then log.info "$desktop_file_path is found." fi done } function scan_desktop_file(){ unset desktop_file_path local result="" for desktop_file_path in $(dpkg -L "$1" | grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do if [ "$(grep NoDisplay=true $desktop_file_path)" = "" ]; then result+="$desktop_file_path," fi done for desktop_file_path in $(dpkg -L "$1" | grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do if [ "$(grep NoDisplay=true $desktop_file_path)" = "" ]; then result+="$desktop_file_path," fi done # 去掉最后一个逗号 if [ -n "$result" ]; then result=${result%,} fi echo "$result" } function launch_app(){ # 检查是否传入了路径参数 if [ -z "$1" ]; then log.error "请传入文件路径作为参数" exit 1 fi DESKTOP_FILE_PATH=$1 if [[ $DESKTOP_FILE_PATH == file://* ]]; then # 如果是,移除 'file://' 部分并输出结果 DESKTOP_FILE_PATH="${DESKTOP_FILE_PATH#file://}" fi # 获取文件内容中第一个 Exec= 后的命令 exec_command=$(grep -m 1 -oP "(?<=Exec=).*" "$DESKTOP_FILE_PATH") # 删除 exec_command 中最后的 % 及其后面的内容 exec_command="${exec_command%\%*}" # 打印提取的命令 log.info "Command is $exec_command" # 在默认终端执行命令 eval "$exec_command" } if [ "$#" -lt 2 ];then log.info "Usage: $0 check/launch/list/start packagename/desktop-file" exit -1 fi if [ "$1" = "check" ];then scan_desktop_file_log "$2" if [ "$desktop_file_path" = "" ];then log.error "No desktop file found. exit -1" exit -1 else exit 0 fi elif [ "$1" = "list" ];then scan_desktop_file "$2" if [ "$desktop_file_path" = "" ];then exit -1 else exit 0 fi elif [ "$1" = "launch" ];then scan_desktop_file_log "$2" if [ "$desktop_file_path" = "" ];then log.error "No desktop file found. exit -1" exit -1 fi launch_app "${desktop_file_path}" elif [ "$1" = "start" ];then launch_app "${desktop_file_path}" fi