在银河麒麟操作系统中,双击 .sh 或 .py 脚本文件后毫无响应时,不必急于怀疑脚本编写存在问题。这其实是系统内置的防护机制在发挥作用——Peony 文件管理器从 V10 SP1 版本开始,默认禁止通过双击执行 .sh 后缀文件;更关键的是,当前桌面环境并不会加载用户的 PATH 变量和工作目录。因此,要让脚本顺利运行,您需要采用以下几种替代方式。

通过终端赋予脚本执行权限并运行
这是最基础且最稳妥的方法——绕过图形界面的限制,直接将脚本交给 Shell 解释器处理。
第一步:打开终端,使用 cd 命令切换至脚本所在目录,例如 cd /home/kylin/Scripts。
第二步:执行 chmod +x deploy.sh 为脚本添加可执行权限。这一步不能省略,因为 Linux 内核会拒绝运行缺少 x 位的文件。
第三步:输入 ./deploy.sh 来启动脚本。注意,必须携带 ./ 前缀,否则系统会尝试在 PATH 路径中寻找,而当前目录通常不在其中。
如果遇到 $'r': 未找到命令 这类提示,说明脚本是在 Windows 环境下编写的,换行符为 CRLF 格式。请立即执行 sed -i 's/r$//' deploy.sh 进行修复,否则后续所有步骤均无法生效。
使用显式解释器调用(无需权限、无需路径)
如果不想修改文件属性,或者不确定脚本是否具备执行权限,这条路径最为省心。
直接在终端输入 bash deploy.sh 即可运行。Bash 会逐行读取文件内容并解释执行,完全不需要依赖 x 权限或 shebang 行。
需要注意的是,如果脚本使用了 [[ ]]、数组、source ~/.bashrc 等 Bash 专属语法,必须使用 bash 而不是 sh——因为在麒麟系统中,sh 指向的是 Dash,并不支持这些特性。
对于 Python 脚本,统一采用 python3 script.py。请避免使用 python,因为系统可能将其指向已废弃的 Python 2,或者根本未安装,最终会报出 ModuleNotFoundError 错误。
创建 .desktop 文件实现双击启动
这是唯一能让普通用户像点击图标一样运行脚本的方式,适合需要反复调用、带交互界面或 GUI 输出的场景。
方法一:手动创建 .desktop 文件
在桌面上新建文本文件,命名为 backup.desktop,填入以下内容:
[Desktop Entry]
Version=1.0
Name=每日备份
Exec=/bin/bash -c "cd /home/kylin/scripts && ./backup.sh"
Terminal=true
Type=Application
Icon=drive-harddisk
Path=/home/kylin/scripts
【Path 字段必须填写,否则脚本内的相对路径将失效】
保存后,在终端执行 chmod +x ~/桌面/backup.desktop。
方法二:通过系统设置添加
点击“开始菜单 → 设置 → 系统 → 开机启动”,然后选择“添加自启动程序”。在“命令”栏粘贴完整路径:/bin/bash /home/kylin/scripts/backup.sh。系统会自动生成对应的 .desktop 文件并存放至 ~/.config/autostart/ 目录。
运行 Perl 脚本的特别注意事项
Perl 并非麒麟系统的预装组件,首次运行 .pl 文件前必须先安装解释器。
执行 sudo apt update && sudo apt install perl perl-base perl-modules-5.34。版本号请以 apt-cache search perl-modules 实际返回的结果为准。
脚本的第一行必须是 #!/usr/bin/perl,且该路径需与 which perl 的输出完全一致。如果输出是 /usr/local/bin/perl,就必须修改 shebang,否则 ./script.pl 会报 Command not found。
赋权后仍然无法执行?请检查文件编码是否为 UTF-8 无 BOM。使用 file -i script.pl 确认,如果显示 iso-8859-1,则执行 iconv -f iso-8859-1 -t utf-8 script.pl > script_new.pl 进行转换后再试。
开机自动运行 .sh 脚本
1. 用户登录后运行(推荐):将 .desktop 文件复制到 ~/.config/autostart/ 目录下。脚本会在 UKUI 桌面就绪后执行,能够访问 X11、用户环境变量以及家目录。
2. 系统启动早期运行(慎用):编辑 /etc/rc.local,在 exit 0 之前添加一行:sudo -u kylin /bin/bash /home/kylin/scripts/mount-nfs.sh。注意必须使用 sudo -u kylin,因为 rc.local 以 root 身份运行,而脚本很可能依赖普通用户的 HOME 或配置文件。
3. 后台守护进程运行:使用 systemd 用户服务。创建 ~/.config/systemd/user/nfs-mount.service,然后执行 systemctl --user enable nfs-mount.service 使其生效。这种方式支持自动重启、日志查看与依赖管理,适合需要长期驻留的监控类脚本。
