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
Проверьте документацию для получения дополнительной информации.
Как это:
( echo a
echo b
echo c ) | real_program
Это выполняет три echo
команды в подоболочке и каналах вывод подоболочки к сценарию.
Подоболочки являются синтаксическим сахаром для bash -c 'echo a; echo b; echo c' | real_program
.
Другой способ сделать это был бы
echo -e "$(cat $input_file)\n$extra_line" | real_program
Третий путь, который работает, по крайней мере, с 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 или чего-либо как этот, если вызов внутренних команд будет дорогим в некотором роде, то Вы заплатите ту цену многократно. Я сомневаюсь, что существует любой путь вокруг этого.