Как записать временный созданный файл?

Правильный инструмент для этого - awk. Он позволяет вам выразить логику простым способом: установите переменную seen при первом просмотре шаблона и пропустите строки, соответствующие шаблону, если он уже был замечен. Если строка не пропущена, распечатайте ее.

awk '/^yyyy-mm-dd[ \t]+hh:mm:ss$/ {if (seen) next; ++seen}
     1 {print}'

Это можно сократить, но это становится более загадочным.

awk '!(/^yyyy-mm-dd[ \t]+hh:mm:ss$/ && !(seen++))'
3
24.11.2016, 09:23
3 ответа

Я нашел это нетривиальное решение:

#!/bin/sh

file_path=$1/script-file-name

while inotifywait -e create "$1"; test ! -f "$file_path"
do
  :
done

chmod g+rw "$file_path"
chown root "$file_path"

Этот сценарий должен запускаться с привилегиями root :

sudo <catch-script> /dir/where/the/target/will/be/generated

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

chown root /dir/where/the/target/will/be/generated
chmod 1775 /dir/where/the/target/will/be/generated

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

3
27.01.2020, 21:13

Размещение временного файла в файловой системе, в которой хранятся все версии файлов, например copyfs . Пример использования:

mkdir /tmp/backend /tmp/recorded
copyfs-mount /tmp/backend /tmp/recorded
TMPDIR=/tmp/recorded myprogram
ls /tmp/backend
cat /tmp/backend/metadata.
…
fusermount -u /tmp/recorded
1
27.01.2020, 21:13

Вы можете временно заменить интерпретатор сценария на программу по вашему выбору (например, cat ), которая позволит вам либо просмотреть сценарий на экране, либо сохранить его где-нибудь. По определению, нет возможности скрыть сценарий от интерпретатора.

Если рассматриваемая программа не предназначена для хранения скрипта в секрете, вы, вероятно, сможете найти его на своем диске с помощью extundelete или аналогичного инструмента для файловой системы, которую вы используете.

3
27.01.2020, 21:13

Теги

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