Назад | Перейти на главную страницу

Есть ли способ создать файл, являющийся результатом выполнения команды?

У меня есть два файла: foo.txt и bar.txt. Мне нужен файл с именем foobar.txt, который является содержимым как foo.txt, так и bar.txt. И если я изменю какой-либо файл, я хочу, чтобы foobar.txt по-прежнему выводил все, что сейчас находится в foo.txt, за которым следует bar.txt.

Теперь, чтобы получить foobar.txt, я могу выполнить:

cat foo.txt bar.txt > foobar.txt

Но мне придется делать это каждый раз, когда я редактирую любой исходный файл.

В идеале хотелось бы сделать что-то вроде этого:

ln -[some arg that uses a command rather than a real file] "cat foo.txt bar.txt" foobar.txt

Это вообще возможно?

Вы можете сделать это через inotifywait команда, она находится в пакете inotify-tools. Насколько я понимаю, это невозможно сделать с помощью команды ln.

Вы можете написать для этого FUSE (пространство пользователя файловой системы). По сути, это написание программы пользовательского пространства, которая будет выступать в качестве файловой системы ядра. Вы можете заставить его иметь любые побочные эффекты, которые вы хотели бы создать, например, когда ваш целевой файл открывается, он кэширует указанные в каталоге файлы foo.txt и bar.txt и возвращает блоки из этого кеша.

В Википедии есть статья здесь: https://en.wikipedia.org/wiki/Filesystem_in_Userspace

Похоже, для того, о чем вы просите, потребуется много работы.