Linux 桌面创建自定义快捷方式
以下面的需求为例:
创建一个同时打开 godot 和 vscode/vscodium 到指定游戏开发目录的启动器
假设软件存放目录结构:
Apps
├── Godot_v4.4.1_stable.x86_64 # 可执行文件
└── VSCodium-linux-x64-1.100.33714
├── codium # 可执行文件
方法一、直接创建桌面启动器
这种方式只能打开第一个应用,不能同时启动这两个应用
/home/grsx/Apps/VSCodium-linux-x64-1.100.33714/codium & \
/home/grsx/Apps/Godot.x86_64
方法二、创建脚本运行
可以先创建一个 sh 脚本,再用启动器执行
#!/bin/bash
/home/grsx/Apps/VSCodium-linux-x64-1.100.33714/codium & \
/home/grsx/Apps/Godot.x86_64
方法三、创建自定义命令
为了提供通用性,可以创建一个 runapp.sh 脚本,用于从 Apps 文件夹启动指定名称的应用,实现如下效果。
runapp godot & runapp codium
以下是实现:
点击查看代码
#!/bin/bash
## 1.参数引入
DEFAULT_PATH="/home/grsx/Apps"
## 2.参数检查
# 检查选项
if [ $1 == -p ]; then
# 检查路径是否存在
if [ ! -d "$2" ]; then
echo "错误: 路径 '$2' 不存在"
exit 1
fi
path=$2
shift 2
else
path=$DEFAULT_PATH
fi
# 检查参数数量
if [ $# -lt 1 ]; then
echo "用法: $0 [<选项> [参数]] <前缀> [参数]"
fi
## 3.逻辑执行
# 进入目标目录
cd "$path" || exit 1
appName="$1"
shift 1 # 移除前一个参数,剩余参数传递给可执行文件
# 使用正则表达式查找匹配的文件和目录(不区分大小写)
shopt -s nocasematch # 启用不区分大小写的匹配
matches=()
while IFS= read -r -d $'\0' item; do
# 提取基本名称(不含路径)
base_name=$(basename "$item")
# 使用正则表达式检查是否包含模式(忽略大小写)
if [[ "$base_name" =~ ${appName} ]]; then
matches+=("$item")
fi
done < <(find . -maxdepth 1 -print0)
shopt -u nocasematch # 恢复默认的大小写敏感设置
# 检查是否找到匹配项
if [ ${#matches[@]} -eq 0 ]; then
echo "未找到包含 '$appName' 的文件或目录"
exit 1
fi
# 分离匹配到的目录和文件
dirs=()
files=()
for match in "${matches[@]}"; do
if [ -d "$match" ]; then
dirs+=("$match")
elif [ -f "$match" ]; then
files+=("$match")
fi
done
## 4.结果处理
# 处理文件
if [ ${#files[@]} -gt 0 ]; then
# 按版本号降序排序文件
sorted_files=($(printf "%s\n" "${files[@]}" | sort -Vr))
selected_file="${sorted_files[0]}"
# 确保文件可执行
if [ ! -x "$selected_file" ]; then
echo "错误: 文件 '$selected_file' 不可执行"
exit 1
fi
echo "执行文件: $selected_file"
exec "./$selected_file" "$@"
# 处理目录
elif [ ${#dirs[@]} -gt 0 ]; then
# 按版本号降序排序目录
sorted_dirs=($(printf "%s\n" "${dirs[@]}" | sort -Vr))
selected_dir="${sorted_dirs[0]}"
cd "$selected_dir" || exit 1
echo "已进入目录: $(pwd)"
# 在新目录中重新运行脚本(递归)
exec "$0" "-p" "$(pwd)" "$appName" "$@"
fi
最终效果
桌面启动器执行:
godot_codium_dev /home/grsx/Projects/WS-Godot/Modules_War/
脚本 godot_codium_dev.sh 放置在 /usr/local/bin/下:
#!/bin/bash
## 检查参数数量
if [ $# -lt 1 ]; then
echo "用法: $0 <godot项目所在路径>"
exit 1
fi
path="${1%/}"
# 检查路径是否存在
if [ ! -d "$path" ]; then
echo "错误: 路径 '$path' 不存在"
exit 1
fi
# 同时执行并关闭终端
nohup runapp godot "$path/project.godot" & runapp codium "$path" &
exit
其它用法
得益于分层实现,可以很快地创建一个用来写博客的快捷方式,命令:
runapp codium /home/grsx/Posts/
补充
对于 vscode/vscodium 的不同功能的管理,可以用工作区,也可以用配置文件,可以参考:{TODO}
作者: GreenSandX
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。