Предоставить вывод программы на языке C как программу Java ввода в командной строке?

C ++ заставил меня пристраститься к силе закрывающей скобки:

(
  cd "$targetDirectory"
  #...
) 
# Whatever (almost) happened in the address space of the subshell
# won't have any effect here
1
08.04.2018, 19:07
2 ответа

То, что вы хотите, возможно и легко. Просто введите

/your/java/program "$(/your/c/program)"

Нотация $(…)называется «подстановкой команд». $(command1)запускает command1с выводом в канал, захватывает его и помещает в командную строку. Итак,

command2 $(command1)
работает command2с выходом command1в качестве аргумента строки команды -. Вы должны добавить кавычки("…")для обработки случая где выход из command1(т. е. ваша программа на C )состоит из нескольких слов (, например,printf("planet earth");). Это то, о чем вы просите.

Я подробно обсуждаю это здесь , где я показываю пример

$ ls -ld "$(date "+%B %Y").txt"
-rwxr-xr-x  1 username groupname    687 Apr  2 11:09 April 2018.txt

П.С. Если вы используете очень старую или необычную систему, нотация $(…)может не работать. В этом случае попробуйте

/your/java/program "`/your/c/program`"

`…`— старая версия $(…). Если $(…)работает в вашей системе, используйте его.

1
27.01.2020, 23:23

То, что вы хотите, возможно, но не так просто, как вы пытались. Как вы правильно сказали, конвейер предоставляет ввод, а не аргументы командной строки.

К счастью, существует (стандартная )программа, которая делает именно это:xargs

В мире GNU (Linux )лучшим способом было бы разделение выходных элементов нулевыми байтами:

/your/c/program | xargs --no-run-if-empty -0 /your/java/program

Вы можете легко попробовать это с помощью echo(, которая в любом случае является командой по умолчанию для xargs`:

echo '/bin
/etc
/usr' | xargs ls -ld
2
27.01.2020, 23:23

Теги

Похожие вопросы