Мне нужно записать в файл вывод двух команд, работающих вместе в одном терминале, в качестве примера выше, ИЛИ регистрировать вывод из первого, когда второй также runnign - как это сделать?
sudo btmon ; sudo hcitool lescan
Я попробовал что-то вроде
{ sudo btmon ; sudo hcitool lescan ;} > file.txt, но id не выдавал оба. Работая вокруг, я запускаю их в двух разных терминалах
sudo btmon > file.txt из одного
и
sudo hcitool lescan из другого
и он работал так, как я принимаю, у меня был журнал запросов из первой команды. Но я хочу, чтобы все это было в одном терминале с какой-то одной строкой, и я знаю, что это возможно. Вопрос только в том, как это делается?
Поскольку никто, казалось, не создал ответ, я сделаю это. Я буду использовать выдержки из этого источника
Решение в комментариях
(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
Поскольку никто, казалось, не создал ответ, я сделаю это. Я буду использовать выдержки из этого источника
Решение в комментариях
(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
Поскольку никто, казалось, не создал ответ, я сделаю это. Я буду использовать выдержки из этого источника
Решение в комментариях
(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