这是一个写给普通用户使用的sh脚本,功能就是双击启动,就可以自动运行相同目录下的可执行文件(存在多个可执行程序时,可以按一定规则优先运行某个程序,也可以列出当前目录下的可执行程序清单,输入对应序号回车,自行对应程序),包含但不限于Python代码、其他SH脚本等,具体看代码注释即可。
1、如果是UOS系统,第一次启动时,右键单击sh脚本,属性里面授予可执行程序权限。后续就可以直接双击启动-选择“在终端中运行”。
2、如果是Ubuntu系统,第一次启动时,右键单击sh脚本,属性里面授予可执行程序权限。后续可以右键单击—选择“作为程序运行”
3、如果是uos系统,且安装了UOS自己的deepin-wine8-stable软件(这个是UOS或deepin的专用的wine兼容包),还可以自动执行exe。包括安装程序或者绿色软件都可以执行。不过你第一次运行时可能需要自己补充下win7字体包。具体补充字体方法:
a.先确认安装了deepin-wine8-stable,若没安装,请用sudo apt install deepin-wine8-stable进行安装。
b.用本脚本先随便运行一个exe程序,让wine程序完成第一次初始化,exe程序界面打开后(第一次可能因为缺少字体而乱码),就可以关闭了。这样才能后续补充字体。
c.去其他网站下载个win7字体库包,把全部win7字体,解压后,复制到下面的文件夹“~/.wine/drive_c/windows/Fonts”,(打开文件管理器,按快捷键Ctrl+L,就可以调出地址栏,把这个路径复制进去敲回车,就可以进入wine的默认字体文件夹了)
d.再次用本sh脚本调用exe程序,你会发现exe应该都正常使用了。(ARM构架的主机可能只能运行一些简单的软件,复杂的,有时会出错,怀疑是性能不够,所以Linux系统最好还是用原生程序)
完整sh脚本如下:
#!/bin/bash
# 描述功能
echo -e "运行在终端的脚本,会自动查找同级目录下py、pyc、run、sh、exe后缀的文件。若只有一个可执行程序,会自动执行;有多个程序时,若存在“index_”开头的程序也会自动执行,否则会列出文件名称,输入对应序号即可执行对应程序。\n若你执行的是可执行文件(*.run),或者执行的文件名字包含“_UI”或“_GUI”字样时,退出程序后,终端窗口也会立即关闭。\n若你执行的是Windows程序(*.exe),则会尝试调用“deepin-wine8-stable”命令来运行它,需要电脑已安装有deepin-wine8-stable软件。\n"
# 获取当前目录
current_dir=$(pwd)
# 获取当前脚本的名称
current_script=$(basename "$0")
# 查找当前目录下后缀为 .py、.pyc、.run、.sh、.exe 的文件
files=($(find "$current_dir" -maxdepth 1 -type f \( -name "*.exe" -o -name "*.py" -o -name "*.pyc" -o -name "*.run" -o -name "*.sh" \) ! -name "$current_script"))
# 获取文件数量
file_count=${#files[@]}
# 提示信息函数
function prompt_message {
echo "未在 $current_dir 目录下找到可执行的py、pyc、run、sh、exe后缀的文件。"
}
# 执行文件函数
function execute_file {
local file=$1
echo "若您执行的是带界面的程序又没看到程序窗口,请最小化本窗口试下。(可能程序界面出现在终端窗口后面,被挡住啦)"
#echo "正在执行文件: $file" # 添加调试信息
case "$file" in
*.py) python3 "$file" ;;
*.pyc) python3 "$file" ;;
*.run) chmod +x "$file" && "$file" ;;
*.sh) sh "$file" ;;
*.exe) deepin-wine8-stable "$file" ;;
*) echo "无法识别的文件类型: $file" ;;
esac
}
# 检查文件数量
if [[ $file_count -eq 0 ]]; then
prompt_message
elif [[ $file_count -eq 1 ]]; then
selected_file="${files[0]}"
echo "检测到唯一可执行的文件: $selected_file"
execute_file "$selected_file"
else
# 查找是否存在以 "index_" 开头的文件
index_file=""
for file in "${files[@]}"; do
if [[ $(basename "$file") == index_* ]]; then
index_file="$file"
break
fi
done
if [[ -n $index_file ]]; then
selected_file="$index_file"
echo "检测到以 'index_' 开头的文件: $selected_file"
execute_file "$selected_file"
else
# 列出所有可执行文件
echo "检测到多个可执行文件:"
selectable_files=()
for i in "${!files[@]}"; do
selectable_files+=("${files[i]}")
echo "$(( ${#selectable_files[@]} )). $(basename "${files[i]}")"
done
# 提示用户选择要执行的文件
read -p "请输入要执行的文件的数字序号: " choice
if [[ $choice -ge 1 && $choice -le ${#selectable_files[@]} ]]; then
selected_file="${selectable_files[$((choice-1))]}"
echo "您选择了: $selected_file"
execute_file "$selected_file"
else
echo "无效的选择。"
fi
fi
fi
# 如果选中的文件是 .run 或者 .exe 文件,或者文件名中包含 "_UI" 或 "_GUI" 时,不保持终端打开
if [[ $selected_file == *.run || $selected_file == *.exe || $selected_file == *_UI* || $selected_file == *_GUI* ]]; then
exit 0
else
read -p "按任意键退出..."
fi