Запишите в вывод файла двух команд, работающих вместе в одном терминале

Я должен записать в вывод файла двух команд, работающих вместе в одном терминале как пример выше, ИЛИ регистрирующих вывод сначала, когда второе также работает - как сделать это?

sudo btmon ; sudo hcitool lescan

Я попробовал что-то как

{ sudo btmon ; sudo hcitool lescan ;} > file.txt но идентификатор не дал из обоих. Как работают вокруг, я выполняю их в двух различных терминалах

sudo btmon > file.txt от одного

и

sudo hcitool lescan от другого

и это работало способом, я принимаю, у меня был журнал потребности от первой команды. Но я хочу иметь все это в одном терминале только с своего рода одной строкой, и я знаю, что это возможно. Единственный вопрос состоит в том, как он сделан?

0
задан 16 July 2017 в 08:18

1 ответ

Так как никто, казалось, не создал ответ, я сделаю это. Я буду использовать извлечения этого источника

Решение в комментариях

(sudo btmon & sudo hcitool lescan ) &> scan_log.txt

Это использует () вместо {}. Также и> означает, что не только STDOUT, но также и STDERR будут переданы. Поскольку кажется, что один из тех инструментов использовал STDERR для вывода, таким образом, это было необходимо. Я хочу объяснить проблемы из комментариев немного поэтому, я объясню различие между () и {} сначала.

(команда)

Размещение списка команд между круглыми скобками заставляет подоболочку быть созданной, и каждая из команд в списке, который будет выполняться в той подоболочке, не удаляя неэкспортируемые переменные.

Так как список выполняется в подоболочке, переменные присвоения не остаются в силе после того, как подоболочка завершается.

{команда;}

Размещение списка команд между фигурными скобками заставляет список выполняться в текущем контексте оболочки. Никакая подоболочка не создается. Точка с запятой (или новая строка) после списка требуется.

В дополнение к созданию подоболочки существует тонкое различие между этими двумя конструкциями из-за исторических причин. Фигурные скобки являются зарезервированными словами, таким образом, они должны быть разделены от списка пробелами. Круглые скобки являются операторами и распознаны как отдельные маркеры оболочкой, даже если они не разделяются от списка пробелом.

При оглядывании назад к первому предложению OP просто забыл ; потому что точка с запятой (или новая строка) после списка требуется. между {}, таким образом, оба из следующих решений должны решить проблему:

{ sudo btmon; sudo hcitool lescan; } &> scan_log.txt

(sudo btmon & sudo hcitool lescan) &> scan_log.txt
4
ответ дан 2 November 2019 в 22:16

Другие вопросы по тегам:

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