#!/bin/bash # ===== Log ===== # log.info xxx # log.warn xxx # log.info xxx # log.debug xxx # 带颜色的echo function log.color_output() { local color=$1 shift 1 echo >&2 -e "\033[${color}m$@\033[0m" return 0 } # Log is named without prefix "utils." for convenience # Usage: log.log ...content function log.log() { if [[ $# < 2 ]]; then return -1 fi local level=$1 shift 1 case $level in error) log.color_output "0;31" "[ERROR] $@" ;; warn) log.color_output "1;33" "[WARN] $@" ;; info) log.color_output "1;37" "[INFO] $@" ;; debug) log.color_output "1;30" "[DEBUG] $@" ;; esac return 0 } function log.error() { log.log "error" "$@"; } function log.warn() { log.log "warn" $@; } function log.info() { log.log "info" $@; } function log.debug() { log.log "debug" $@; } 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" # 在默认终端执行命令 bash -c $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