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

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

sudo btmon ; sudo hcitool lescan

Я попробовал что-то вроде

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

sudo btmon > file.txt из одного

и

sudo hcitool lescan из другого

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

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

3 ответа

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

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

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

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

(команда)

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

{команда; }

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

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

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

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

(sudo btmon & sudo hcitool lescan) &> scan_log.txt
4
ответ дан 22 May 2018 в 20:30

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

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

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

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

(команда)

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

{команда; }

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

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

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

{ sudo btmon; sudo hcitool lescan; } &> scan_log.txt (sudo btmon & sudo hcitool lescan) &> scan_log.txt
4
ответ дан 18 July 2018 в 10:11

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

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

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

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

(команда)

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

{команда; }

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

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

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

{ sudo btmon; sudo hcitool lescan; } &> scan_log.txt (sudo btmon & sudo hcitool lescan) &> scan_log.txt
4
ответ дан 24 July 2018 в 19:31

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

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