14个版本
0.1.14 | 2024年1月12日 |
---|---|
0.1.12 | 2023年4月12日 |
0.1.11 | 2022年12月24日 |
0.1.8 | 2022年9月20日 |
0.1.2 | 2021年4月30日 |
#69 在 并发
每月 73 次下载
17KB
320 行
parallel-sh
parallel-sh
受Rust Parallel (parallel) 启发,并行化 '其他非并行命令行任务'。但 parallel-sh
不再尝试重造GNU Parallel的全功能,它将简单地以平台首选的shell(默认为Unix系统上的'sh -c',Windows上的'powershell.exe -c')在单独的线程中执行(命令的)行。
预期内容
- 每个子进程的输出(stdout和stderr)仅在子进程退出后存储和打印。
- 有一些简单的日志记录和一些运行时指标(通过-v, -vv或-vvv)可用。
- 整个crate很小,<400行代码(大部分是命令行参数解析),并且可以快速修改以满足更复杂的要求。
parallel-sh
不包含的内容
- 没有替换字符串(例如 '{}') 或输入令牌。命令将按提供的参数、文件或通过stdin提供的方式执行。
- 命令来源不会'链接'。参数将通过 首选项 处理
- 如果找到 ARGS,则忽略
--file
选项和stdin。 - 如果提供
--file
,则忽略stdin上的任何内容。 - 只有当没有命令参数且没有找到 '--file' 选项时,stdin上的任何行才被视为要执行的命令。
- 如果找到 ARGS,则忽略
- stdin不会从父进程继承,并且子进程尝试从stdin流中读取的任何尝试都将导致流立即关闭。但只要您的shell提供该功能,您就可以在每个线程中使用管道、重定向等,例如
parallel-sh 'ls -1 |wc -l
或parallel-sh.exe "Get-ChildItem -Path * | Measure-Object -Line"
这些特性的大部分效果可以通过在将命令传递给 parallel-sh
之前处理命令来实现。
选项
parallel-sh 0.1.14
Execute commands in parallel
Usage: parallel-sh [OPTIONS] [clijobs]...
Arguments:
[clijobs]...
Options:
-q, --quiet Do not print `parallel-sh` warnings
-n, --dry-run Perform a trial run, only print what would be done (with -vv)
-v, --verbose... Sets the level of verbosity
-l, --log <FILE> Log output to file
--halt-on-error Stop execution if an error occurs in any thread
-j, --jobs <THREADS> Number of parallel executions
-s, --shell <SHELL> Shell to use for command execution. Must support '-c' (defaults to sh)
--no-shell Do not pass commands through a shell, but execute them directly
-f, --file <FILE> Read commands from file (one command per line)
-h, --help Print help
-V, --version Print version
注意
默认情况下,命令通过 -c "command" 执行,因此提供的shell必须支持 '-c' 选项。
使用 --no-shell
时,命令将在不通过shell传递的情况下启动。这可以避免在每个线程中启动shell的开销,但您将丢失诸如引号、转义字符、单词拆分、通配符模式、变量替换等特性。
命令继承 parallel-sh
的工作目录。
优先级
-
将命令作为参数传递
parallel-sh "sleep 2 && echo first" "sleep 1 && echo second"
-
传递包含每行一个命令(-line)的文件
parallel-sh -f /tmp/commands $ cat /tmp/commands sleep 2 && echo first sleep 1 && echo second
-
通过stdin传递命令
echo -e 'sleep 2 && echo first\nsleep 1 && echo second' |parallel-sh
依赖关系
~2–10MB
~90K SLoC