Движение запускает последовательность - модификация сценария оболочки

Версия регулярного выражения работает, если ваши строки действительно такие, и есть некая выделенная строка, которая идентифицирует, какие именно строки. В противном случае, мы можем записать макрос для того, чтобы сделать то, что вы хотите.

Для этого перейдите к началу второй строки и нажмите:

qq I" Escape A" Escape 3j q

Это процитирует первую строку и приведет нас к следующей, на которую мы будем смотреть. Затем можно нажать @q, чтобы проиграть все только что выполненные действия, или, скажем, 5@q, чтобы сделать это пять раз.

Как это работает: q - это команда для начала записи макроса, которую мы также вызываем q (вы можете выбрать любую букву). В этом макросе мы вставляем двойную кавычку в начало строки (I"), выходим из режима вставки (Escape), добавляем двойную кавычку в конец строки (A") и снова выходим из режима вставки. Мы идём вниз по трём строкам (3j) к следующей строке, которая будет цитироваться. q останавливает запись макроса.

После этого мы возвращаемся в то же самое место, с которого начали, и можем запустить макрос (@), который мы сохранили как q, чтобы сделать это снова к следующей паре строк. Со счетом перед @, как в @5@q, мы делаем это много раз.


Вместо 3j, если расстояние как-то нерегулярно, можно использовать }}k: спускаемся на два параграфа к пустой строке после следующей (}}) и делаем резервную копию (k). В любом случае, запуск одного и того же макроса.

] На самом деле, вы можете записать любую серию действий, которые делают то, что вы хотите и возвращают вас туда, где вы хотели быть. До тех пор, пока шаги, которые вы выполняете, имеют смысл в любом контексте, вы можете запустить макрос, внести все необходимые изменения и перейти к следующему местоположению, затем остановить макрос и повторить его.

.

1
12.10.2014, 11:22
2 ответа

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

Я добавил строку export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so в сценарий /etc/init.d/motion и убедился, что папка, в которую я сохраняю свои фотографии, имеет разрешения, чтобы пользовательское движение могло написать на нее -opps!

#!/bin/sh -e
#
# /etc/init.d/motion: Start the motion detection
#
### BEGIN INIT INFO
# Provides:   motion
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Motion detection
# Description: loads motion and assigns privileges
### END INIT INFO

# Ported to new debian way using sh and /lib/lsb/init-functions
# by Angel Carpintero <ack@telefonica.net>
# Modified by : Juan Angulo Moreno <juan@apuntale.com>
# eddy Petrisor <eddy.petrisor@gmail.com>
# ArAge <ArAge@gmx.co.uk>


NAME=motion
PATH_BIN=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/bin/motion
PIDFILE=/var/run/$NAME.pid
DEFAULTS=/etc/default/$NAME
DESC="motion detection daemon"


ENV="env -i LANG=C PATH=$PATH_BIN"

. /lib/lsb/init-functions

test -x $DAEMON || exit 0

RET=0

[ -r "$DEFAULTS" ] && . "$DEFAULTS" || start_motion_daemon=yes


check_daemon_enabled () {
    if [ "$start_motion_daemon" = "yes" ] ; then
        return 0

    else
        log_warning_msg "Not starting $NAME daemon, disabled via /etc/default/$NAME"
        return 1
    fi

}

case "$1" in

  start)
    if check_daemon_enabled ; then
        if ! [ -d /var/run/motion ]; then
                mkdir /var/run/motion
        fi
        chown motion:motion /var/run/motion
        #=================insert this line to  load the uv4l libraries====
        export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
        #=================================================================
        chmod 777 /var/run/motion
        sleep 30

        log_daemon_msg "Starting $DESC" "$NAME" 
        if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion ; then
            log_end_msg 0
         else
            log_end_msg 1
            RET=1
        fi
    fi
    ;;

  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    if start-stop-daemon --stop --oknodo --exec $DAEMON --retry 30 ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi
    ;;

  reload|force-reload)
    log_daemon_msg "Reloading $NAME configuration"
    if start-stop-daemon --stop --signal HUP --exec $DAEMON ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi
    ;;

  restart-motion)
    if check_daemon_enabled ; then
        log_action_begin_msg "Restarting $NAME"
        if $0 stop && $0 start ; then
            log_action_end_msg 0
        else
            log_action_cont_msg "(failed)"
            RET=1
        fi
    fi
    ;;

  restart)
    $0 restart-motion
    ;;

  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}"
    RET=1
    ;;
esac


exit $RET
0
27.01.2020, 23:38

С помощью инструментов GNU:

grep -H something * | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n

Или

ack something | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n

используется awk для отделения имени файла от обычного вывода grep и awk вызывает date для получения даты файлов. grep имеет опцию -H , обеспечивающую отображение имени файла на выходе, даже если в командной строке отображается только один файл.

В качестве примера вывода:

$ grep setupcon /etc/init.d/* | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}' | sort -n
2011-12-05 12:05 /etc/init.d/keymap.sh:# If setupcon is present, then we've been superseded by console-setup.
2011-12-05 12:05 /etc/init.d/keymap.sh:if type setupcon >/dev/null 2>&1; then
2011-12-08 18:00 /etc/init.d/console-setup:     if setupcon --save; then
2011-12-08 18:00 /etc/init.d/console-setup:test -f /bin/setupcon || exit 0
2012-04-28 02:41 /etc/init.d/kbd:if which setupcon >/dev/null
2012-09-30 18:02 /etc/init.d/keyboard-setup:    if setupcon -k 2>/dev/null; then
2012-09-30 18:02 /etc/init.d/keyboard-setup:test -f /bin/setupcon || exit 0

Объяснение команд awk

  • -F:

    Этот параметр устанавливает разделитель полей в : , так что первое поле является именем файла. (Необходимо надеяться, что имя файла не содержит двоеточия.)

  • «date -r\»« $1 »\« +\»% F% R\« »| getline d

    Выполняется date -r filename +«% F% R », чтобы получить дату изменения файла в форме, подходящей для Дата сохраняется в переменной d .

  • print d, $0

    Выполняется печать данных, за которыми следует строка вывода из grep .

-121--54125-

Ни ack , ни grep не имеют понятия дат изменения файла. Для этого сначала необходимо создать список файлов, а затем отсортировать их на основе.

Можно использовать xargs для выполнения вывода ack или grep в другую команду, которая предоставит даты изменения. Для этого можно использовать stat .

Пример

$ grep -Rl awk * | xargs -n 1 stat --printf "%y ------ %n\n"
2013-11-12 10:06:16.000000000 -0500 ------ 100855/tst_ccmds.bash
2013-11-13 00:32:11.000000000 -0500 ------ 100911/cmd.bash
2013-11-23 03:16:17.000000000 -0500 ------ 102298/cmd.bash
2013-12-14 20:06:04.467708173 -0500 ------ 105159/cmd.txt
2013-12-16 03:20:48.166016538 -0500 ------ 105328/cmds.txt
2013-01-14 14:17:39.000000000 -0500 ------ 106932/red5-1.0.1.tar.gz

ПРИМЕЧАНИЕ: Этот метод отображает только имена файлов, соответствующих запросу, а также дату изменения.

-121--54â-

Замените строки ЗАГРУЗИТЬ БИБЛИОТЕКИ _.... с:

export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so

Это делает LD_PRELOAD настройку доступной для команд/программ, вызываемых из сценария (например, motion

И строка , если start-stop-daemon --start....

if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion $DAEMON -c /etc/motion/motion.conf ; then

Параметр start-stop-daemon -chuid принимает в качестве параметра имя пользователя, поэтому я ожидаю, что motion будет таким именем. Это не оставляет команды в исходной строке, поэтому следует вставить $ DAEMON (полный путь к движению ) и его параметр командной строки.

2
27.01.2020, 23:38

Теги

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