Размещение фрагмента кода между двумя тегами html в Solaris

Оп здесь.

Решение, которое я придумал :, это скрипт с именемburst:

inotifywait -e moved_to "$monitored_dir" -m \
    | burst 2 'echo run post-upload'

Скрипт burst:

#!/bin/bash

help() {
    >&2 echo "Usage: $0 <interval> <command>"
}

set -e
trap help EXIT
interval=${1:?missing interval}; shift
: ${1:?missing command}

trap - EXIT
set +e
exec 3> >(sed "s/^/burst: /" >&2)
while read line; do
    echo "$line" >&3
    test -n "$!" && kill -term $! 2>/dev/null
    (sleep $interval && $SHELL -c "$*") &
done

По сути, это создание подоболочки, которая ожидает определенное время перед запуском фактической команды((sleep $interval && $SHELL -c "$*"). Любая новая строка, прочитанная inotifywait, просто уничтожит такую ​​оболочку (, если она существует ), и создаст ее снова.

Как только набор строк завершится, оболочка сможет завершить sleep, и команда будет выполнена.

Имеет некоторые недостатки:

  1. Он убивает и порождает один процесс для каждой строки в стандартном вводе. Это означает, что вы хотите сначала уменьшите количество строк (, следовательно, фильтр -e moved_toвinotifywait). Это может не соответствовать производительности, если количество загруженных файлов достаточно большой!

  2. Если второй пакет поступает после $intervalсекунд (или передачи файла занимает это время )есть вероятность, что это убьет текущую публикацию -обновление процесс. Пока такой процесс является идемпотентным или транзакционным, это будет хорошо... так что голову.

0
02.03.2018, 00:50
1 ответ

Простой способ с использованием sed(, но с некоторыми подводными камнями, о которых нужно знать):

sed 's/<head/your-js-text<head/'

Это вставит текст перед вашим тегом <head>. Основная проблема, о которой нужно знать, - это как правильно "экранировать" символы в вашем javascript, которые могут быть неверно истолкованы sed, например. одинарная кавычка и косая черта вперед/назад. Кроме того, если -ваш html-файл неправильно -сформирован и содержит более одного тега <head>, каждый из них будет заменен.

РЕДАКТИРОВАТЬ :Если в вашем javascript много косых черт,вы можете использовать функцию sed, которая позволяет заменить символ косой черты в команде s. Любое из следующего также будет работать:

sed 's^<head^your-js-text<head^'

sed 's%<head%your-js-text<head%'

sed 's#<head#your-js-text<head#'
1
28.01.2020, 02:43

Теги

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