команда построения с перемеженными, повторяющимися именами параметров и значениями аргументов - PullRequest
0 голосов
/ 31 января 2020

Я использую инструмент ROBOT для объединения файлов онтологии: http://robot.obolibrary.org/merge

У него есть параметр --inputs, который принимает подстановочный знак, но, похоже, он не работать в моем окружении (GitBash в Windows 10).

Как я могу взять несколько таких файлов

$ ls -1 *ttl
cl.owl.txt.ttl
efo.owl.txt.ttl
htn.owl.txt.ttl

И собрать команду в этом общем form?

$ ./robot merge \
--input cl.owl.txt.ttl \
--input efo.owl.txt.ttl \
--input htn.owl.txt.ttl \
--output merged.ttl

Использование одинарных или двойных кавычек не помогает:

$ jdk1.8.0_201/bin/java -Xms4G -Xmx8G -jar robot.jar merge --inputs "ontopath/*ttl"
UNKNOWN ARG ERROR unknown command or option: ontopath\efo.owl.txt.ttl
$ jdk1.8.0_201/bin/java -Xms4G -Xmx8G -jar robot.jar merge --inputs 'ontopath/*ttl'
UNKNOWN ARG ERROR unknown command or option: ontopath\efo.owl.txt.ttl

Ответы [ 2 ]

1 голос
/ 31 января 2020

Вы можете написать себе скрипт-обертку, который позволит вам создать список аргументов таким образом, чтобы он, надеюсь, выжил при искажении Windows Java аргумента с подстановочными знаками. Вот скрипт mergefiles:

#!/bin/bash
output="$1"
shift
for file
do
  inputs+=( --input "$file" )
done

./robot merge "${inputs[@]}" --output "$output"

В Git Bash теперь вы сможете запускать ./mergefiles merged.ttl *.tll

0 голосов
/ 31 января 2020

IIR C, интерпретатор команд Windows не выполняет расширение glob; он оставляет это команде, получающей аргумент типа *.ttl. bash, однако, расширяет шаблон и передает полученные слова как отдельные аргументы. Следующие значения эквивалентны:

robot merge --inputs *.ttl --output merged.ttl
robot merge --inputs cl.owl.txt.ttl efo.owl.txt.ttl htn.owl.txt.ttl --output merged.ttl

Вам нужно заключить в кавычки шаблон так, чтобы он передавался буквально в robot для его расширения:

robot merge --inputs '*.ttl' --output merged.ttl
...