Alfred Workflow 使用指南
Components
介绍主要有哪些基础组件及其用法
Arg/Var utility
- 把 输入值(param) 保存到 自定义的参数(例如 my_task) 中.
- 后续可以使用 {var:my_task} 来引用该值.
- 如下, 把 {query} 保存到 task 参数中

- 如下, 使用参数 {var:task}

ListFilter
Practices
如何对参数进行dict映射?
如下需求:
- 提前定义好了字典内容: cn-beijing=cn-beijing-btc-a01; cn-hangzhou=cn-hangzhou-dg-a01;
- 输入了参数 cn-beijing, 需要能映射为对应的value, 即 cn-beijing-btc-a01
- 然后把该value赋值到一个新的变量
region上
这里选用自己熟悉的bash脚本, 分为几部分:
1. 如何对输入参数进行映射?
由于bash里定义dict的数据格式, 需要较高的版本, 兼容性不好. 因此这里推荐使用 json 格式 + jq 命令 来完成. kv的查表&映射. 如下脚本:
#!/bin/bash
# 预定义JSON数据
json_data='{
"cn-beijing": "cn-beijing-btc-a01",
"cn-hangzhou": "cn-hangzhou-dg-a01"
}'
# 获取输入参数并进行翻译
translate() {
word=$1
translated_word=$(echo "$json_data" | jq -r --arg word "$word" '.[$word]')
if [ "$translated_word" != "null" ]; then
echo "$translated_word"
else
echo "无法翻译:$word"
fi
}
# 测试脚本
translate "$1"
但注意, 上边脚本只是把对应的value echo出来, 并没有赋值到workflow变量里. 如果需要放到变量里, 需要继续看第二步.
2. 如何将value保存在新的workflow的变量中?
要注意的是, echo出来的一定要是JSON类型, 且kv需要符合alfred的规范. 参见文章: Workflow/environment variables in Alfred — deanishe.net
详细规范&格式定义如下:
- 如果是 From Run Script actions 类型, 则脚本里输出格式需要为: (通过echo/puts来输出)
{
"alfredworkflow":
{
// "arg": "https://www.google.com", // 注意输出的args, 后边是通过 {query} 来进行引用. 个人建议不要使用这种hidden的方式. 建议都显式通过{var:xxx}来引用.
"variables":
{
"region": "$translated_word" // 后续可以使用
}
}
}
- 如果是 From Script Filters 类型, 则脚本里输出格式需要为: (通过echo/puts来输出)
{
"items":
[
{
"title": "$translated_word",
// "arg": "$translated_word",
"variables":
{
"region": "$translated_word"
}
}
]
}
3. 完整样例
- From Run Script actions 样例
#!/bin/bash
# 预定义JSON数据
json_data='{
"cn-beijing": "cn-beijing-btc-a01",
"cn-hangzhou": "cn-hangzhou-dg-a01"
}'
# 获取输入参数并进行翻译
translate() {
regex=$1
translated_words=$(echo "$json_data" | jq -r "to_entries[] | select(.key | test(\"$regex\")) | {\"arg\": .value, \"variables\": {\"region\": .value}}")
if [ -n "$translated_words" ]; then
echo "{ \"alfredworkflow\": $translated_words }"
else
echo '{ "alfredworkflow": { "arg": "无法翻译", "title": "无法翻译", "subtitle": "无法翻译" } }'
fi
}
# 测试脚本
translate "$1"
- From Script Filters 样例
#!/bin/bash
# 预定义JSON数据
json_data='{
"cn-beijing": "cn-beijing-btc-a01",
"cn-hangzhou": "cn-hangzhou-dg-a01"
}'
# 获取输入参数并进行翻译
translate() {
word=$1
translated_word=$(echo "$json_data" | jq -r --arg word "$word" '[{ "arg": $word, "title": .[$word], "subtitle": .[$word], "variables": {"region": .[$word]}}]')
if [ "$translated_word" != '[{"arg":null,"title":null,"subtitle":null}]' ]; then
echo "{ \"items\": $translated_word }"
else
echo '{ "items": [{ "arg": "无法翻译", "title": "无法翻译", "subtitle": "无法翻译" }] }'
fi
}
# 测试脚本
translate "$1"
如何添加自定义日期参数?
例如 最终需要的url 是 https://www.xxx.com/query={query}&startTime=xxx&endTime=xxx 格式
需要默认
- startTime是 now() - 3天;
- endTime是now()
- 且格式是
2023-01-01 12:20:20
1. 添加自定义参数
如下图, 增加 Arg and Vars 组件:

2. 设置时间格式:
如上图, {isodate +1d:yyyy-MM-dd hh:mm:ss} 代表1天以后, 格式是 2023-01-01 12:12:12 的格式
完整的时间格式, 参见: Dynamic Placeholders - Alfred Help and Support
3. 使用自定义参数:
如下图, 使用 {var:starTime} 的方式引用变量
