mirror of
				https://gitee.com/spark-store-project/spark-store
				synced 2025-11-04 08:12:21 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 <level> ...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
 |