Как суммировать вывод двух команд и сохранить его в файл?

Вопрос звучит немного противоречиво, поскольку вы цитируете инструменты X, но просите решение, которое «в идеале должно работать без X».

О вашем 4 обнаружении: xinput предоставит вам соответствие

$ xinput list-props 11
Device 'AT Translated Set 2 keyboard':
    Device Enabled (145):   1
    Coordinate Transformation Matrix (147): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Product ID (266):    1, 1
    Device Node (267):  "/dev/input/event0"

по крайней мере со следующей версией

$ xinput --version
xinput version 1.6.1
XI version on server: 2.3


Первый шаг: обнаружение клавиатуры устройство событий на C

#include 
//#include 
#include 
#include 

// typical use : sudo ./a.out /dev/input/event*
int main (int argc, char *argv[])
{
  struct input_event ev[64];
  int fd[argc],rd,idev,value, size = sizeof (struct input_event);
  char name[256] = "Unknown";

  if(argc==1) return -1;

  int ndev=1;
  while(ndev= size){
      value = ev[0].value;
      if (value != ' ' && ev[1].value == 1 && ev[1].type == 1){
        ioctl (fd[idev], EVIOCGNAME (sizeof (name)), name);
        printf ("%s\n", name);
        return idev;
      }
      }
    }
//    sleep(1);
  }
  return -1;
}

Большое спасибо этой странице . Я удалил большинство проверок безопасности из кода, который я заимствовал там, для ясности, в реальном коде они, вероятно, вам нужны.

Обратите внимание, что нажатия клавиш отражаются эхом, поэтому вы действительно можете попросить пользователя нажать клавишу-модификатор (Shift, Control ...), а не любую клавишу .

Второй шаг: используйте xinput для получения идентификатора X из имени устройства

Скомпилируйте указанный выше исходный код C и используйте его следующим образом:

xinput list --id-only "keyboard: $ (sudo ./a. out / dev / input / event *) "

1
01.04.2016, 06:01
2 ответа

Предполагая, что getdatabase1 и getdatabase2 являются командами, которые печатают свои подсчеты в stdout, вы сможете изменить свои назначения на

var1=$(getdatabase1)
var2=$(getdatabase2)
var3=$((var1+var2))
printf "%s\n%s\n%s\n" "$var1" "$var2" "$var3" > file.txt

$(...)Синтаксис запускает команду между паренсами и «возвращает» stdout этой команды, которую мы здесь сохраняем в наших переменных. Без них имя команды будет рассматриваться как сама строка и присваиваться переменным, но она не будет выполнена.

3
29.04.2021, 00:16

вы пытались запустить их в подоболочке следующим образом:

(getdatabase1; getdatabase2) > file.txt 

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

0
29.04.2021, 00:16

Теги

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