Как создать объединенный вход (stdin) для программы

incron и inotify позволил бы Вам сделать некоторое действие, когда указанные файлы затронуты.

Видеть это, установку inotify-tools и выполненный inotifywait -m ~/someFile. В то время как это работает в одном окне, отредактируйте файл в другом окне. Вы будете видеть что-то как:

$ inotifywait -m /home/user/Dropbox/.dropbox
Setting up watches.  
Watches established.
/home/user/Dropbox/.dropbox MODIFY 
/home/user/Dropbox/.dropbox OPEN 
/home/user/Dropbox/.dropbox MODIFY 
/home/user/Dropbox/.dropbox CLOSE_WRITE,CLOSE 

Затем можно отредактировать Ваш (или корни) incrontab точно так же, как Вы отредактировали бы Ваш (или корни) crontab: incrontab -e. С вышеупомянутым примером Вы могли добавить следующее:

/home/user/Dropbox/.dropbox MODIFY /path/to/program/you/want/to/run

Проверьте документацию для получения дополнительной информации.

6
07.07.2013, 18:14
3 ответа

Как это:

( echo a
  echo b
  echo c ) | real_program

Это выполняет три echo команды в подоболочке и каналах вывод подоболочки к сценарию.

Подоболочки являются синтаксическим сахаром для bash -c 'echo a; echo b; echo c' | real_program.

10
27.01.2020, 20:23
  • 1
    , который я вижу, они объединяются и выполняются как один, вместо последовательно. Большое спасибо за это! Для дальнейших читателей это может быть помещено в одну строку, разделенную точкой с запятой. –  greenoldman 07.07.2013, 18:21
  • 2
    , который я добавил немного к своему ответу, чтобы показать, как оболочка выполняет ту операцию. –   07.07.2013, 21:56

Другой способ сделать это был бы

echo -e "$(cat $input_file)\n$extra_line" | real_program
2
27.01.2020, 20:23

Третий путь, который работает, по крайней мере, с GNU, колотит 4.2.37 и должен работать с любым недавним ударом и возможно другими оболочками (я не знаю как обычно поддерживаемый <() ), должен перенаправить вход от команды.

$ echo hello > test
$ echo my > test
$ echo beautiful > test
$ cat <(cat test; echo world)
hello
my
beautiful
world
$

Идея состоит в том, чтобы сначала создать файл, затем запуститься cat перенаправление его stdin от вывода последовательности команды cat test; echo world. Как замечено в выводе, которые вводят, становится конкатенацией вывода всех команд перенаправления ввода.

Альтернативный способ выразить то же самое, которое могло бы быть более портативным, состоит в том, чтобы просто переписать его как простой канал подоболочки в команду:

(cat test; echo world) | cat

Обратите внимание, что команды выполняются последовательно, но их вывод становится единым потоком на входе внешней или следующей команды. Таким образом, в то время как внешнее cat в вышеупомянутом примере не видит EOF или чего-либо как этот, если вызов внутренних команд будет дорогим в некотором роде, то Вы заплатите ту цену многократно. Я сомневаюсь, что существует любой путь вокруг этого.

2
27.01.2020, 20:23

Теги

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