Добро пожаловать в мир нашего нового инструмента для повышения эффективности работы на рабочем столе!
Добро пожаловать в RunFlow!
RunFlow — это инструмент, который можно запускать в терминале. Он основан на Hutool, библиотеке инструментов Java, которая предоставляет множество статических методов для повышения производительности разработчиков.
Hutool-cli позволяет выполнять статические методы Hutool непосредственно из командной строки, что делает разработку более эффективной. Например, вы можете легко сгенерировать случайный UUID, просто выполнив команду:
hu uuid
# output: 483cc7fc-4b22-4188-8f1c-dc1ce4b6d3ee
И это только начало! В RunFlow есть ещё много функций, которые ждут вас.
Просмотр прогресса времени:
hu dayp
# output:
辛丑牛年 五月初三 周六 2021-06-12 09:45:07.755
今日 [oooooooooooooooooooooooooooooooooooooooo ]: 40.63%
本周 [oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ]: 76.79%
本月 [oooooooooooooooooooooooooooooooooooooooo ]: 40.00%
本年 [oooooooooooooooooooooooooooooooooooooooooooo ]: 44.66%
Список файлов в каталоге:
hu ls
# output:
2021-05-30 00:46:38 0 bin
2021-06-02 19:48:08 0 external
2021-06-12 10:29:19 4 KB method
2021-06-25 19:26:38 4.21 KB class.json
2021-06-25 19:27:11 8.06 KB command.json
2021-06-12 10:29:19 749 B converter.json
2021-06-09 22:19:07 165 B external.conf
2021-06-24 22:15:32 7.2 MB hutool.jar
Просмотр календаря:
hu calendar 202106
# output:
2021-06-25
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
# also support like follow command:
# hu calendar 6
# hu calendar 2020
# hu calendar 202101,2,3,4,5
# hu calendar 6,7,8
Дерево файлов:
hu tree
# output:
├─bin
| └─hu.exe
├─external
├─method
├─class.json
├─command.json
├─converter.json
├─external.conf
└─hutool.jar
Обратный отсчёт:
hu countdown 123456789 ms
# 时间单位可以参考最下方的对照表
# output:
1天10小时17分36秒789毫秒
Для использования RunFlow вам потребуется следующее:
— git;
— Java 8+.
Чтобы установить RunFlow, выполните следующие шаги:
Скачайте проект с помощью команды:
git clone https://gitee.com/code4everything/hutool-cli.git
Загрузите соответствующий ZIP-пакет (http://share.qiniu.easepan.xyz/tool/hutool/hu-1.5.zip) и распакуйте его. Структура каталога будет выглядеть следующим образом:
├─bin
| ├─hu
| ├─hu-mac
| └─hu.exe
└─hutool.jar
После распаковки ZIP-файла переместите файлы hutool.jar и содержимое каталога bin в каталог hutool-cli/hutool. Структура каталога должна выглядеть так:
├─bin
│ └─hu(.exe)
└─hutool.jar
Переместите файл hu(.exe) в зависимости от вашей платформы:
Также можно использовать исходный код для обновления файла hutool.jar. Если у вас уже есть каталог bin, то нет необходимости загружать ZIP-файл.
Выполните следующие действия:
Получите последнюю версию кода с помощью команды git pull
.
Выполните команду gradle pack -x test
для создания исполняемого JAR-файла. Вам потребуется среда Java.
Выполните команду gradle install -x test
, чтобы создать двоичный исполняемый файл для вашей платформы (hu(.exe)) и установить его. Вам потребуется среда Go.
Обратите внимание, что -x test
означает пропуск тестовых случаев.
Создайте переменную среды HUTOOL_PATH, указав путь к каталогу hutool-cli/hutool со следующей структурой:
├─bin
│ └─hu(.exe)
└─hutool.jar
Добавьте каталог bin в переменную PATH вашей системы.
Чтобы просмотреть доступные команды, введите:
hu
# output:
Usage: hutool-cli [options]
Options:
-r, --run, --command
命令模式,命令(类方法别名)可以精确的定位到静态方法,-r指令可缺省
-c, --class
类名称(自动加前缀:cn.hutool.)
-m, --method
方法名
-t, --type
参数类型(非必须,缺失时可能导致无法精确的定位方法)
-p, --param, --parameter
方法需要的参数
-y, --yank, --copy
是否将结果复制到剪贴板
-a, --auto-param
将剪贴板字符串内容注入指定索引位置的参数
-v, --version
查看当前版本
-d, --debug
是否开启调试模式
Введите следующую команду, чтобы проверить текущую версию:
hu -v
# output: hutool-cli: v1.2
Введите команду для выполнения метода:
hu -c cn.hutool.core.util.IdUtil -m randomUUID
# output: 3214683f-55c1-412e-8b7a-454c57468d99
hu -r cn.hutool.core.codec.Base64#encode -t java.lang.CharSequence -p hutool-cli
# output: aHV0b29sLWNsaQ==
Введите команду с использованием псевдонима для выполнения метода:
hu -c base64 -m encode -p 'sky is blue'
# output: c2t5IGlzIGJsdWU=
hu -r encode64 'sky is blue' -y
# output: c2t5IGlzIGJsdWU=
# 说明:-y 表示将输出结果复制到剪贴板
hu -r decode64 -a:0
# output: sky is blue
# 说明:-a:0 表示将剪贴板字符串内容注入到索引位置是0的参数中
# v1.2新功能:支持连续执行,符号 // 分隔多个命令,\\0表示将第一个执行结果作为参数注入,\\1表示将第二个执行结果作为参数注入,依次类推
hu encode64 'test multi cmd' // decode64 \\0
# output: test multi cmd
``` Это можно опустить, как в примере выше для генерации случайного UUID.
Выполнение JavaScript-скрипта:
```shell
hu eval 5+6+3+22+9999
# output: 10035
hu methods regex
# regex — это псевдоним класса cn.hutool.core.util.ReUtil
# output:
contains(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
contains(regex:java.lang.String, content:java.lang.CharSequence)
count(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
count(regex:java.lang.String, content:java.lang.CharSequence)
delAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
delAll(regex:java.lang.String, content:java.lang.CharSequence)
delFirst(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
delFirst(regex:java.lang.String, content:java.lang.CharSequence)
delPre(regex:java.lang.String, content:java.lang.CharSequence)
escape(c:char)
escape(current:java.lang.CharSequence)
extractMulti(group:java.util.regex.Pattern, pattern:java.lang.CharSequence, content:java.lang.String)
extractMulti(regex:java.lang.String, content:java.lang.CharSequence, template:java.lang.String)
extractMultiAndDelPre(group:java.util.regex.Pattern, var:cn.hutool.core.lang.Holder, pattern:java.lang.String)
extractMultiAndDelPre(regex:java.lang.String, contentHolder:cn.hutool.core.lang.Holder, template:java.lang.String)
findAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, group:int)
findAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, group:int, collection:java.util.Collection)
findAll(regex:java.lang.String, content:java.lang.CharSequence, group:int)
findAll(regex:java.lang.String, content:java.lang.CharSequence, group:int, collection:java.util.Collection)
findAllGroup0(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
findAllGroup0(regex:java.lang.String, content:java.lang.CharSequence)
findAllGroup1(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
findAllGroup1(regex:java.lang.String, content:java.lang.CharSequence)
get(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, groupIndex:int)
get(regex:java.lang.String, content:java.lang.CharSequence, groupIndex:int)
getAllGroups(i:java.util.regex.Pattern, startGroup:java.lang.CharSequence, groupCount:boolean)
getAllGroups(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getFirstNumber(StringWithNumber:java.lang.CharSequence)
getGroup0(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getGroup0(regex:java.lang.String, content:java.lang.CharSequence)
getGroup1(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getGroup1(regex:java.lang.String, content:java.lang.CharSequence)
isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
isMatch(regex:java.lang.String, content:java.lang.CharSequence)
replaceAll(content:java.lang.CharSequence, regex:java.lang.String, replacementTemplate:java.lang.String)
replaceAll(e:java.lang.CharSequence, str:java.util.regex.Pattern, pattern:cn.hutool.core.lang.func.Func1)
replaceAll(group:java.lang.CharSequence, var:java.util.regex.Pattern, replacement:java.lang.String)
replaceAll(str:java.lang.CharSequence, regex:java.lang.String, replaceFun:cn.hutool.core.lang.func.Func1)
Версия v1.2 уже поддерживает вывод имён параметров методов.
Просмотр доступных псевдонимов методов (можно точно определить местоположение метода).
hu alias
# эквивалентно: hu -r alias
# output:
assignable = org.code4everything.hutool.Utils#assignableFrom(sourceClass:java.lang.Class, testClass:java.lang.Class)
between = cn.hutool.core.date.DateUtil#between(beginDate:java.util.Date, endDate:java.util.Date, unit:cn.hutool.core.date.DateUnit=day)
calc = org.code4everything.hutool.Utils#calc(expression:java.lang.String, scale:int=0)
class = org.code4everything.hutool.Utils#parseClassName(className:java.lang.String)
cpuinfo = cn.hutool.system.oshi.OshiUtil#getCpuInfo()
creditc = cn.hutool.core.util.CreditCodeUtil#randomCreditCode()
date2ms = org.code4everything.hutool.Utils#date2Millis(date:java.util.Date)
decode32 = cn.hutool.core.codec.Base32#decodeStr(source:java.lang.String)
decode64 =
``` ```
cn.hutool.core.codec.Base64#decodeStr(source:java.lang.CharSequence)
decodeqr = cn.hutool.extra.qrcode.QrCodeUtil#decode(qrCodeFile:java.io.File)
download = cn.hutool.http.HttpUtil#downloadFileFromUrl(url:java.lang.String, destFile:java.io.File)
encode32 = cn.hutool.core.codec.Base32#encode(source:java.lang.String)
encode64 = cn.hutool.core.codec.Base64#encode(source:java.lang.CharSequence)
encode64url = cn.hutool.core.codec.Base64#encodeUrlSafe(source:java.lang.CharSequence)
eval = cn.hutool.script.ScriptUtil#eval(e:java.lang.String)
fconvert = cn.hutool.core.util.CharsetUtil#convert(file:java.io.File, srcCharset:java.nio.charset.Charset, destCharset:java.nio.charset.Charset)
fopen = cn.hutool.core.swing.DesktopUtil#open(e:java.io.File=.)
fr = cn.hutool.core.io.FileUtil#readUtf8String(file:java.io.File)
ftype = cn.hutool.core.io.FileUtil#getType(file:java.io.File)
fw = cn.hutool.core.io.FileUtil#writeUtf8String(content:java.lang.String, file:java.io.File)
get = cn.hutool.http.HttpUtil#get(urlString:java.lang.String)
grep = org.code4everything.hutool.Utils#grep(line:java.util.regex.Pattern, pattern:java.util.List)
hex = cn.hutool.core.util.HexUtil#encodeHexStr(data:java.lang.String)
idcard = cn.hutool.core.util.IdcardUtil#getIdcardInfo(idcard:java.lang.String)
jinfo = cn.hutool.system.SystemUtil#props()
lower = org.code4everything.hutool.Utils#toLowerCase(str:java.lang.String)
lunar = org.code4everything.hutool.Utils#lunar(date:java.util.Date)
match = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
md5 = cn.hutool.crypto.SecureUtil#md5(data:java.lang.String)
methods = org.code4everything.hutool.Utils#outputPublicStaticMethods(className:java.lang.String)
mkdir = cn.hutool.core.io.FileUtil#mkdir(dir:java.io.File)
ms2date = cn.hutool.core.date.DateUtil#date(date:long)
now = cn.hutool.core.date.DateUtil#date()
objectid = cn.hutool.core.util.IdUtil#objectId()
pinyin = cn.hutool.extra.pinyin.PinyinUtil#getPinyin(str:java.lang.String)
post = cn.hutool.http.HttpUtil#post(urlString:java.lang.String, body:java.lang.String={})
qrcode = cn.hutool.extra.qrcode.QrCodeUtil#generate(content:java.lang.String, width:int=1000, height:int=1000, targetFile:java.io.File)
random = cn.hutool.core.util.RandomUtil#randomLong(min:long=0, max:long=9223372036854775807)
randomc = cn.hutool.core.img.ImgUtil#randomColor()
randomd = cn.hutoot.core.util.RandomUtil#randomDouble(min:double=0, max:double=9223372036854775807)
randompass = cn.hutool.core.util.RandomUtil#randomString(number:java.lang.String=abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ234567892345678923456789, i:int=16)
randoms = cn.hutool.core.util.RandomUtil#randomString(length:int=16)
regex = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
second = cn.hutool.core.date.DateUtil#currentSeconds()
sha1 = cn.hutool.crypto.SecureUtil#sha1(data:java.lang.String)
sha256 = cn.hutool.crypto.SecureUtil#sha256(data:java.lang.String)
split = cn.hutool.core.text.CharSequenceUtil#splitTrim(str:java.lang.CharSequence, separator:java.lang.CharSequence=,)
str2unicode = cn.hutool.core.text.UnicodeUtil#toUnicode(str:java.lang.String)
suppers = org.code4everything.hutool.Utils#getSupperClass(clazz:java.lang.Class)
sysinfo = cn.hutool.system.oshi.OshiUtil#getSystem()
test = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
unicode2str = cn.hutool.core.text.UnicodeUtil#toString(c:java.lang.String)
upper = org.code4everything.hutool.Utils#toUpperCase(str:java.lang.String)
uuid = cn.hutool.core.util.IdUtil#randomUUID()
uuid0 = cn.hutool.core.util.IdUtil#simpleUUID()
week = cn.hutool.core.date.DateUtil#dayOfWeekEnum(date:java.util.Date)
weekend = cn.hutool.core.date.DateUtil#endOfWeek(date:java.util.Date)``` Просмотр категории и метода псевдонима: существует два способа.
1. ```shell
hu -c base64 -m alias
Вывод:
hu -r date#alias
Вывод:
* between = between(beginDate:java.util.Date, endDate:java.util.Date, unit:cn.hutool.core.date.DateUnit=day)
* ms2date = date(date:java.util.Date)
* now = now()
* second = currentSeconds()
* week = dayOfWeekEnum(date:java.util.Date)
* weekend = endOfWeek(date:java.util.Date).
Мы можем просматривать псевдонимы команд, классов и методов с помощью ключевого слова «alias».
**Перекрытие метода псевдонима**
Используя классы и методы, определённые в файле псевдонима, можно заменить параметры типа и количества, указанные в конкретной команде терминала.
Например, псевдоним метода «md5» определён в файле псевдонима как cn.hutool.crypto.SecureUtil#md5(data:java.lang.String), и он принимает параметр строкового типа. Но теперь мы хотим вычислить MD5-хэш файла. Как это сделать?
Есть два варианта:
1. Определить ещё один псевдоним для вычисления MD5 файла. Недостатком является то, что это приведёт к большому количеству псевдонимов, которые будет трудно запомнить.
2. Перекрыть псевдоним. Синтаксис: hu command@type1,type2 param.
Снова рассмотрим метод md5. Сначала посмотрим, какие у него есть перегрузки:
```shell
hu md5@
Вывод:
Можно видеть, что этот метод поддерживает ввод файлов. В этом случае мы можем напрямую использовать перекрытие псевдонима следующим образом:
# file — это псевдоним java.io.File
hu md5@file command.json
Вывод: 268f6d715cf4ec191a96b80c29f2449f.
Hu command@ используется для просмотра перегрузок псевдонима.
Значения по умолчанию
В файле псевдонима можно определить значения параметров по умолчанию. При выполнении метода все значения по умолчанию либо отсутствуют, либо присутствуют.
Рассмотрим пример создания двумерного QR-кода:
Просмотр команды генерации QR-кода:
# поиск qrcode, связанного с командой
hu alias qr
Вывод:
Затем выполните:
# этот метод имеет значение по умолчанию, которое может быть полностью опущено
hu qrcode 'qrcode test' /home/test.png
Или не используйте значение по умолчанию:
# хотя у этого метода есть значение по умолчанию, мы можем его не использовать
hu qrcode 'qrcode test' 600 600 /home/test.png.
Пользовательский псевдоним
Псевдонимы могут использоваться для быстрого указания на класс или статический метод. Формат примерно следующий: ключ в JSON будет использоваться в качестве псевдонима, а значение будет включать имя класса, имя метода и требуемые типы параметров метода.
{
"encode64url": {
"method": "cn.hutool.core.codec.Base64#encodeUrlSafe",
"paramTypes": [
"j.char.seq"
]
},
"echo": {
/*@ символ означает всегда анализировать значение параметра по умолчанию*/
"method": "qe#run(@string=return args,@boolean=false)"
}
}
Hutool-cli предоставляет множество часто используемых псевдонимов. См. следующие файлы:
После определения собственных псевдонимов вы также можете отправить их в этот репозиторий, чтобы другие могли воспользоваться преимуществами Hutool.
Обратите внимание: определение псевдонима имени класса не должно превышать 16 символов.
Версия 1.2 поддерживает определение частных псевдонимов. Определите путь {user.home}/hutool-cli/, формат имени файла и псевдонима такой же, как указано выше, программа сначала прочитает пользовательские частные псевдонимы.
Загрузка внешних классов
Способ 1: создайте каталог external в каталоге, соответствующем HUTOOL_PATH, и скопируйте файлы классов (включая каталоги пакетов) в каталог external, например, класс com.example.Test. external/com/example/Test.class
Метод два, рекомендуемый, заключается в создании файла external.conf в соответствующем каталоге HUTOOL_PATH. В этом файле необходимо определить путь к классам (без указания пути к пакетам), используя разделитель — запятую. Например, если абсолютный путь к классу /home/java/com/examaple/Test.class
, то в файле нужно указать путь /home/java
.
Файл external.conf поддерживает координаты mvn, но при условии, что в локальном репозитории Maven уже есть соответствующий jar-файл:
// Это комментарий
/path/folder
/path/test.jar
mvn:org.code4everything:wetool-plugin-support:1.6.0
На основе этой функции вы можете разработать собственные команды для локального использования.
Если вам понравился проект, не забудьте поставить звезду и добро пожаловать с PR.
Сокращённое имя | Полное имя класса |
---|---|
string | java.lang.String |
j.char.seq | java.lang.CharSequence |
file | java.io.File |
charset | java.nio.charset.Charset |
date | java.util.Date |
class | java.lang.Class |
j.boolean | java.lang.Boolean |
j.byte | java.lang.Byte |
j.short | java.lang.Short |
j.integer | java.lang.Integer |
j.char | java.lang.Character |
j.long | java.lang.Long |
j.float | java.lang.Float |
j.double | java.lang.Double |
reg.pattern | java.util.regex.Pattern |
map | java.util.Map |
list | java.util.List |
set | java.util.Set |
Чтобы проверить правильность сокращения, можно использовать команду hu class и посмотреть на результат. Если hu class j.float возвращает java.lang.Float, а hu class no.class возвращает no.class, то это неверное сокращение имени класса. Этот метод также можно использовать для определения типа класса.
Преобразователь поддерживает смещение дат. Например, чтобы сдвинуть текущую дату на 5 дней вперёд, используйте команду hu date now+5d
. Или чтобы сдвинуть дату на неделю назад, используйте hu date now-7d
. Знак «+» означает смещение вперёд, знак «–» — смещение назад. После знака следует формула смещения и единица измерения.
Также можно выполнять операции begin и end с датами. Например, начало сегодняшнего дня: hu date today<d
, конец текущей недели: hu date now>w
. Символ «<» обозначает операцию begin, символ «>» — операцию end. За ними следует единица измерения.
Существует механизм автоматического дополнения дат. Например, 6-е число текущего месяца можно ввести как hu date 06
, а 13-е марта текущего года — как hu date 03-13
. Это упрощает ввод данных.
Таблица сокращений дат
Сокращение | Описание |
---|---|
now | Текущее время |
today | Начало сегодняшнего дня |
Таблица единиц измерения
Единица измерения | Описание |
---|---|
ms | Миллисекунды |
s | Секунды |
sec | Секунды |
min | Минуты |
h | Часы |
hour | Часы |
d | Дни |
day | Дни |
w | Недели |
week | Недели |
m | Месяцы |
mon | Месяцы |
month | Месяцы |
y | Годы |
year | Годы |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )