Scoop 进阶教程

1 概述

在前面的 win10 快速搭建各种开发环境中,我们已经学会了如何安装 Scoop 以及 Scoop 的基本使用,接下来让我们学习下 Scoop 的一些高级用法。

2 帮助命令

Scoop 命令的信息是内置的,所以我们可以通过下面命令查看内置命令一些信息及用法:

scoop help

运行将会输出下面内容:

alias          管理别名
bucket         管理软件源
cache          显示或清除下载缓存
checkup        检查潜在问题
cleanup        通过删除旧版本来清理应用程序
config         获取或设置配置值
create         创建一个自定义应用程序清单
depends        列出应用程序的依赖项
export         导出(一个可导入的)已安装的应用程序列表
help           显示命令的帮助
hold           禁用应用程序更新
home           打开应用程序主页
info           显示应用程序的信息
install        安装应用程序
list           已安装的应用程序列表
prefix         返回指定应用程序的路径
reset          切换应用程序版本
search         搜索可用的应用程序
status         显示状态和检查新的应用程序版本
unhold         启用应用程序更新
uninstall      卸载应用程序
update         更新应用程序或Scoop本身
virustotal     在virustotal.com上寻找应用程序的哈希
which          定位shim/可执行文件(类似于 Linux 上的 'which'

要查看特定命令的帮助,请运行下面命令:

scoop help <command>

比如想要查看 cache 命令怎样使用,可以运行下面命令:

scoop help cache

3 卸载 Scoop

如果你想卸载 Scoop 和所有与 Scoop 一起安装的程序,你可以运行下面命令:

scoop uninstall scoop

4 App Manifest

4.1 简介

App Manifest 表示应用程序清单,它是一个 JSON 文件,定义了下载、校验、安装软件等信息,一个 App Manifest 就代表了一个软件,许多 App Mainifest 就组成了 Bucket,可以表示为一个软件仓库。

如果已知 App Manifest 文件位置,你还可以运行下面命令来安装软件:

scoop install shared/files/scoop/app.json
# 或者
scoop install https://gist.github.com/xxxx/xxxx/raw/app.json

4.2 属性

4.2.1 必须属性

version:表示应用程序版本信息。

4.2.2 可选属性

##: 包含注释的单行字符串或字符串数组。

architecture:如果应用程序有 32 位和 64 位版本,可以使用这个来表示,它有两个子属性,一个是 32bit ,一个是64bit,这两个属性都可以使用 bincheckverextract_dirhashinstallerpre_installpost_installshortcutsuninstallerurl等属性,示例如下:

"architecture": {
    "64bit": {
        "url": "https://7-zip.org/a/7z1900-x64.msi",
        "hash": "a7803233eedb6a4b59b3024ccf9292a6fffb94507dc998aa67c5b745d197a5dc"
    },
    "32bit": {
        "url": "https://7-zip.org/a/7z1900.msi",
        "hash": "b49d55a52bc0eab14947c8982c413d9be141c337da1368a24aa0484cbb5e89cd"
    }
},

autoupdate:定义如何自动更新 App Manifest 文件,示例如下:

"checkver": {
    "re": "/(?<type>early_access|GA)/(?<path>jdk(?<major>[\\d.]+)(?:.*)?/(?<build>[\\d]+)(?:/GPL|/binaries)?)/(?<file>openjdk-(?<version>[\\d.]+)(?<ea>-ea)?(?:\\+[\\d]+)?_windows-x64_bin.(zip|tar.gz))",
    "replace": "${version}-${build}${ea}"
},
"autoupdate": {
    "architecture": {
        "64bit": {
            "url": "https://download.java.net/java/$matchType/$matchPath/$matchFile"
        }
    },
    "hash": {
        "url": "$url.sha256"
    },
    "extract_dir": "jdk-$matchVersion"
}

bin:应用程序可执行文件。您还可以创建别名 shim,它使用与实际可执行文件不同的名称,并(可选)将参数传递给可执行文件,格式为: [ "program.exe", "alias", "--arguments" ],示例如下:

"bin": [
        "busybox.exe",
        [
            "busybox.exe",
            "ar",
            "ar"
        ],
        [
            "busybox.exe",
            "arch",
            "arch"
        ]
]

checkver:应用维护者和开发者可以使用 scoop/bin/checkver 目录下的 checkver.ps1 工具来检查应用版本。checkver 清单中的属性是一个正则表达式,可用于匹配应用主页中应用的当前稳定版本,示例如下:

"checkver": {
      "url": "https://golang.org/dl/",
      "regex": "go([\\d.]+)\\.windows-"
  },

depends:将自动安装应用程序的运行时依赖项。

description:对应用程序的描述,不要包含程序的名称,如果它与应用程序的文件名相同。

env_add_path: 将此目录添加到用户路径或系统路径,该目录是相对于安装目录的,并且必须在安装目录中。

env_set: 为用户或系统,设置一个或多个环境变量,示例如下:

"env_set": {
      "GOROOT": "$dir"
  },

extract_dir: 如果 url 指向一个压缩文件(支持 .zip.7z.tar.gz.lzma.lzh),Scoop 将只提取其中指定的目录。

extract_to: 如果 url 指向一个压缩文件(.zip.7z.tar.gz.lzma.lzh 支持),Scoop 会将所有内容提取到指定的目录。示例如下:

"extract_to": [
    "",
    "Plugins"
],

hash: 一个字符串或字符串数组,其中每个 URL 都有一个文件哈希 url。默认情况下,散列是 SHA256,但您可以通过在散列字符串前加上 sha512:sha1:md5:前缀来使用 SHA512、SHA1 或 MD5。

homepage:程序的主页。

innosetup:true 如果安装程序基于 InnoSetup,则设置该值。

installer:运行非 MSI 安装程序的说明。

  • file: 安装程序可执行文件。
  • script:要作为安装程序/卸载程序执行的命令。
  • args:传递给安装程序的参数数组,可选的。
  • keep:true :如果安装程序在运行后应该保留(以供将来卸载为例),则设置该值,如果省略或设置为任何其他值,安装程序将在运行后被删除。可以参考extras/oraclejdk 示例。在uninstaller 指令中使用时,将忽略此选项。
  • $fname$manifest$architecture$dir 等变量可用于 scriptargs属性。
  • scoop installscoop upgrade 运行期间调用。

license:程序软件许可证,对于众所周知的许可证,请使用 https://spdx.org/licenses/ 上的标识符,对于其他许可证,请使用许可证的 URL(如果可用)。

notes:单行字符串或字符串数组,在安装应用程序后显示一条消息。

persist: 应用程序数据持久化。

post_install:安装应用程序后要执行的命令,可以使用变量,如 $dir$persist_dir$version

pre_install: 与post_install 相同的选项,但在安装应用程序之前执行。

psmodule:作为 PowerShell 模块安装在 ~/scoop/modulesname(必需):模块的名称,该名称应至少与解压目录中的一个文件匹配,以便 PowerShell 将其识别为模块。

shortcuts:在开始菜单中添加快捷方式。该数组必须包含一个可执行文件/标签对。第三个和第四个元素是可选的。

  1. 目标文件的路径,必填。
  2. 快捷方式的名称(支持子目录:<AppsSubDir>\\<AppShortcut> 例如 sysinternals),必需。
  3. 启动参数, 可选。
  4. 图标文件的路径, 可选。

suggest:显示一条建议消息。

uninstaller:与installer相同的选项,运行文件/脚本以卸载应用程序。

url:要下载的文件的 URL。如果有多个 URL,您可以使用 JSON 数组。

4.3 示例

我们可以看下 7zip 这个软件的 App Manifest 是怎样的,7zip 放在 main 这个 git 仓库的 bucket 文件夹下,它的文件名是 7zip.json,文件内容如下:

{
    "version": "19.00",
    "description": "A multi-format file archiver with high compression ratios",
    "homepage": "https://www.7-zip.org/",
    "license": {
        "identifier": "Freeware,LGPL-2.0-only,BSD-3-Clause",
        "url": "https://www.7-zip.org/license.txt"
    },
    "architecture": {
        "64bit": {
            "url": "https://7-zip.org/a/7z1900-x64.msi",
            "hash": "a7803233eedb6a4b59b3024ccf9292a6fffb94507dc998aa67c5b745d197a5dc"
        },
        "32bit": {
            "url": "https://7-zip.org/a/7z1900.msi",
            "hash": "b49d55a52bc0eab14947c8982c413d9be141c337da1368a24aa0484cbb5e89cd"
        }
    },
    "extract_dir": "Files\\7-Zip",
    "bin": "7z.exe",
    "shortcuts": [
        [
            "7zFM.exe",
            "7-Zip"
        ]
    ],
    "checkver": {
        "url": "https://www.7-zip.org/download.html",
        "regex": "Download 7-Zip ([\\d.]+)"
    },
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://7-zip.org/a/7z$cleanVersion-x64.msi"
            },
            "32bit": {
                "url": "https://7-zip.org/a/7z$cleanVersion.msi"
            }
        }
    }
}

该文件描述从哪里下载 7zip 这个软件,怎样校验下载的软件,怎样进行安装等,一般配置 versionhomepagearchitectureurlhashbin 这几个属性就可以了,其它的是可选的。

App Manifest 开始编写的时候,需要到官网,把软件下载下来,然后本机查看 hash,默认为 sha256 码,也有 md5sha1 形式的,命令如下:

certutil -hashfile [file] sha256
certutil -hashfile [file] md5
certutil -hashfile [file] sha1

获取到软件的 hash 后直接填入到 App Manifest。

url 是比较难处理的。简单说,开源软件最方便,很多可以开箱即用,而非开源的不少就特别繁琐,有的甚至处理不了。现在简单介绍下一般情况:

  • .msi类:一般不需要改变。
  • .zip类:一般不需要改变,部分需要在下载链接末尾添加 #/dl.7z
  • .exe类:大部分都需要在下载链接末尾添加 #/dl.7z,Scoop 默认使用 7zip 进行解压安装,不能直接解压的,如果内置有 innosetup,需要在脚本里添加,"innosetup": true。

5 Bucket

5.1 简介

Bucket 中文意思是,在 Scoop 中,Buckets 是应用程序的集合,也可以理解成一个软件配置清单仓库。更具体地说,Buckets 是一个 Git 存储库,其中包含描述如何安装应用程序的 JSON 配置清单。

默认情况下,当您运行 scoop install <app>,它会在 main 中查找,但也可以从其他 Bucket 安装。

Scoop 支持添加其他 Bucket,任何人都可以设置自己的 Bucket,其他人可以从这个 Bucket 添加和安装——他们只需要知道存储 Bucket 的 Git 存储库的位置。

5.2 查看已知 Bucket

查看已知 Bucket,即 Scoop 已经知道这个桶在哪里,你可以运行下面命令:

scoop bucket known

5.3 添加其它 Bucket

如果 Bucket 是 Scoop 已知的,你可以运行下面命令:

scoop bucket add <bucket name>
 
# 实例添加 extras bucket
scoop bucket add extras

如果 Bucket 对于 Scoop 是未知的,你必须指定它的位置,即 Git 存储库,你可以运行下面命令:

scoop bucket add <bucket name> <git location>
 
# 实例添加 extras bucket
scoop bucket add extras https://github.com/lukesampson/scoop-extras.git

5.4 创建 Bucket

Scoop bucket 的创建的关键步骤如下:

  1. 使用 Bucket 模板创建一个 git 项目。
  2. 创建 App Manifest 文件。
  3. 提交文件。
  4. 将项目上传到 Gitee 或 GitHub。

Bucket 已经有了一套比较好的模板,这是当前 Scoop 社区的 Leader 写的 模板,我们可以直接下载下来使用,其他文件基本不用改动,将自定义的 App Manifest 放在 bucket 文件夹里面就行,App Manifest 配置完成后,提交代码,然后将将项目 push 到 Gitee 或 GitHub,然后本地添加这个 Bucket,添加命令如下:

scoop bucket add <项目名> <项目 git 地址>

6 实战:创建自己的 Bucket 并添加 chiner 软件

6.1 简介

chiner 原名叫 PDMan,它是由国人开发的一款非常好用的数据库建模软件,代码开源,目前托管在码云上,目前 Scoop 的 Bucket 没有添加这个软件,所以让我们来学习下怎样添加这个软件到自己的 Bucket仓库。

6.2 配置 Bucket

  1. 登录码云,创建一个仓库。

  1. 选择点击导入。

  1. 仓库 URL 配置为 Scoop 的模板 URL,然后配置仓库名称,配置完成后选择导入。

  1. 仓库创建好了,然后复制 URL,在命令运行 git clone <url>

  1. 项目下载完成后,我们需要下载 chiner 这个软件,然后运行下面命令获取 hash
certutil -hashfile CHINER-win_v3.3.0.exe sha256

  1. 进入项目目录,在 bucket目录里创建 chiner.json文件,文件内容如下:
{
   "version": "3.3.0",
   "description": "元数建模,一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。",
   "homepage": "http://www.pdman.cn/#/",
   "license": "MIT",
   "architecture": {
       "32bit": {
           "url": "http://chiner-release.httpchk.com/CHINER-win_v3.3.0.exe#/dl.7z",
           "hash": "d7ec91e6b820dcf269351829267f5c33c791d81b132bdcc4f15c798724376518",
           "pre_install": [
               "Expand-7zipArchive \"$dir\\`$PLUGINSDIR\\app-32.7z\" \"$dir\"",
               "Remove-Item \"$dir\\`$*\", \"$dir\\Uninstall*\" -Recurse"
           ]
       }
   },
   "bin": "CHINER元数建模.exe",
   "shortcuts": [
       [
           "CHINER元数建模.exe",
           "CHINER元数建模"
       ]
   ]
}

bin 属性获取,你可以解压 chiner 这个软件,然后再解压 app-32.7z,解压后里面的可执行文件就是 bin 的值。

  1. 保存文件,然后通过下面命令提交文件并推送到 Gitee:
git add *
git commit -m "add chiner app"
git push

6.3 添加 Bucket 并安装软件

安装成功后,在菜单打开该软件。

7 总结

Scoop 还有一些高级用法,我这里并没有列出来,那些用法一般不会用到,如果大家有兴趣,可以去看下官方文档。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Arduino中SCoop多线程库 实例程序代码 /*#include #include */ #include //多线程程序库 #include //超声波传感器 #include //电机传感器 //LiquidCrystal_I2C lcd(0x27,16,2); defineTask(LEDTask);//LED 灯的线程 defineTask(ServoTask);//舵机线程 #define TRIGGER_PIN 2 #define ECHO_PIN 3 #define MAX_DISTANCE 400 NewPing sonar(TRIGGER_PIN,ECHO_PIN,MAX_DISTANCE);//超声波传感器 Servo myservo;//电机传感器 const int replyPin=A2;//光敏传感器 const int soundPin=A0;//声音传感器 const int senorPin=8;//触摸感应键 const int rPin=7;//Led const int ledPin=6; //Led int value=0;//光敏传感器 int sound=0;//声音传感器 int Senor=-1; void LEDTask::setup(){ pinMode(replyPin,INPUT); pinMode(soundPin,INPUT); pinMode(rPin,OUTPUT); } void LEDTask::loop(){ value=analogRead(replyPin);//光敏传感器感应到光强度 Serial.print("光敏传感器感应到光强度:"); Serial.println(value); sound=analogRead(soundPin);//声音感应器感应到声音大小 Serial.print("声音感应器感应到声音大小:"); Serial.println(sound); unsigned int uS=sonar.ping();//超声波传感器感应到数据 Serial.print("超声波传感器感应到数据:"); Serial.println(uS/US_ROUNDTRIP_CM); if(value>400&&(sound>80||uS/US_ROUNDTRIP_CM<5)){ analogWrite(rPin,255); analogWrite(ledPin,0); delay(5000); }else{ analogWrite(rPin,0); analogWrite(ledPin,0); } } void ServoTask::setup(){ pinMode(senorPin,INPUT); myservo.attach(9); myservo.write(0); } void ServoTask::loop(){ Senor=digitalRead(senorPin);//触摸感应键感应 Serial.print("触摸感应键感应:"); Serial.println(Senor); if(Senor==1){ myservo.write(30); delay(100); myservo.write(60); delay(100); myservo.write(90); delay(3000); myservo.write(60); delay(100); myservo.write(30); delay(100); myservo.write(0); } } void setup(){ mySCoop.start(); Serial.begin(9600); } void loop(){ yield(); } //这段程序有一个舵机、一个LED灯(两者都是执行器),两个执行器执行时需要相互不干扰,所以使用多线程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT读享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值