我目前正在并行测试 gnu 以使用 bash 在多个服务器之间分发比较命令。在其最基本的功能中,此比较命令需要两个输入进行比较(oracle 数据库访问),并需要通过 -o 输出文件名。程序至少需要一个动作加载、保存或直接上传。
compare -o cmp.input1.input2.dat Input1 Input2
Run Code Online (Sandbox Code Playgroud)
我有几千个这样的输入对并创建一个包含所有组合的文件,以便每一行都包含程序所需的输出文件名和数据库标识符
#test_parallel
-o cmp.input1.input2.dat Input1 Input2
-o cmp.input1.input3.dat Input1 Input3
-o cmp.input2.input3.dat Input2 Input3
[...]
Run Code Online (Sandbox Code Playgroud)
并使用并行执行命令,但是比较命令失败
parallel -a test_parallel "compare {}"
ERROR: No action specified for results (load, save or direct upload)
usage: compare [-u][-o <file>] query target
Run Code Online (Sandbox Code Playgroud)
使用--dryrun模式这是并行执行的:
compare -o\ cmp.input1.input2.dat\ Input1\ Input2
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我不明白,比较程序没有正确处理转义的空格。在 bash 中执行此命令会导致完全相同的错误消息消息。在 -o 标志之后删除转义符(我可以将 -o 移动到并行命令)会导致“参数过多”错误。删除所有转义符会按预期执行命令。
是否可以告诉 parallel 在命令调用中不打印转义符?我似乎没有在文档中找到任何内容,除了这是预期的默认行为,如parallel --shellquote