Назначение вывода программы переменной в скрипте оболочки - PullRequest
0 голосов
/ 12 октября 2019

У меня есть инструмент (написанный на C), который принимает параметр выходного файла, в который инструмент записывает некоторую строку вывода.

tool -o output-file-name

Я бы хотелчтобы вызвать инструмент из сценария оболочки и назначить выходную строку переменной.

Я попытался:

var = $ (tool -o a.txt 1> / dev / null;cat a.txt && rm a.txt)

Вышеописанное работает, но я бы хотел более элегантное решение.

PS: я далеко не гуру сценариев.

Ответы [ 3 ]

0 голосов
/ 12 октября 2019

Я предполагаю, что невозможно перейти на код для поддержки вывода на стандартный вывод. Возможно, потому что код отправляет дополнительную информацию (ведение журнала) на стандартный вывод.

Вы можете использовать перенаправление ввода-вывода или подстановку процесса, чтобы исключить необходимость сохранять / вызывать данные из файла. Аргумент конструкции «> (cat)» указывает bash создать канал, между «tool» и «cat» (который просто напечатает файл).

# PREFERRED
# IO Redirection, using extra fd (#3).
var=$(./f.sh -o /dev/fd/3 3>&1 1>/dev/null)

# Use process substitution, use extra 'cat' process.
var=$(tool -o >(cat) >/dev/null)

1-е решение более эффективно (без дополнительной работы кота ...). 2-е решение немного более компактно.

0 голосов
/ 21 октября 2019

Поскольку вы работаете в Linux, вы можете использовать tool -o /dev/stdout

0 голосов
/ 12 октября 2019

Вы можете запустить инструмент без опции -o

tool

или как Уильям Перселл , записанный с / dev / stdout в виде файла

tool -o /dev/stdout

илив краткой форме

tool -o -
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...