Как исправить ошибку «updatedb: не удается найти группу« mlocate »» в Entware?

конкретный ответ

Поскольку я люблю уменьшать форки и допускает много трюков, есть моя цель:

todate=2013-07-18
cond=2013-07-15

Ну, а теперь:

{ read todate; read cond ;} < <(date -f - +%s <<<"$todate"$'\n'"$cond")

Это заново заполнит обе переменные $todate и $cond, используя только один форк, с выходом date -f -, который принимает stdio для чтения одной даты за строкой.

Наконец, вы можете разорвать цикл с помощью

((todate>=cond))&&break

Или как функция:

myfunc() {
    local todate cond
    { read todate
      read cond
    } < <(
      date -f - +%s <<<"$1"$'\n'"$2"
    )
    ((todate>=cond))&&return
    printf "%(%a %d %b %Y)T older than %(%a %d %b %Y)T...\n" $todate $cond
}

Используя встроенный printf, который может вывести время даты с секундами от эпохи (см. man bash;-)

Этот скрипт использует только один форк.

Альтернативный вариант с ограниченным количеством форков и функцией чтения даты

Это создаст выделенный подпроцесс (только один форк):

mkfifo /tmp/fifo
exec 99> >(exec stdbuf -i 0 -o 0 date -f - +%s >/tmp/fifo 2>&1)
exec 98

Поскольку вход и выход открыты, запись fifo может быть удалена.

Функция:

myDate() {
    local var="${@:$#}"
    shift
    echo >&99 "${@:1:$#-1}"
    read -t .01 -u 98 $var
}

Nota Чтобы предотвратить бесполезные форки типа todate=$(myDate 2013-07-18), переменная должна задаваться самой функцией. А чтобы разрешить свободный синтаксис (с кавычками или без кавычек для datestring), имя переменной должно быть последним аргументом.

Тогда сравнение дат:

myDate 2013-07-18        todate
myDate Mon Jul 15 2013   cond
(( todate >= cond )) && {
    printf "To: %(%c)T > Cond: %(%c)T\n" $todate $cond
    break
}

может привести к виду:

To: Thu Jul 18 00:00:00 2013 > Cond: Mon Jul 15 00:00:00 2013
bash: break: only meaningful in a `for', `while', or `until' loop

если вне цикла.

Или используйте shell-connector bash функцию:

wget https://github.com/F-Hauri/Connector-bash/raw/master/shell_connector.bash

или

wget https://f-hauri.ch/vrac/shell_connector.sh

(Wich не совсем одинаковые: .sh содержат полный тестовый скрипт, если он не исходный)

source shell_connector.sh
newConnector /bin/date '-f - +%s' @0 0

myDate 2013-07-18        todate
myDate "Mon Jul 15 2013"   cond
(( todate >= cond )) && {
    printf "To: %(%c)T > Cond: %(%c)T\n" $todate $cond
    break
}
7
19.12.2017, 10:32
2 ответа

Пакет addgroup необходим и включен в busybox прошивки Padavan.

Выполните следующие шаги от имени пользователя root:

grep -s mlocate /etc/group || addgroup mlocate
chgrp mlocate /opt/var/mlocate
chmod g=rx,o= /opt/var/mlocate
chgrp mlocate /opt/bin/locate
chmod g+s,go-w /opt/bin/locate
touch /opt/var/mlocate/mlocate.db
chgrp mlocate /opt/var/mlocate/mlocate.db

Это однострочный (однократная команда копирования и вставки), чтобы исправить сообщение «updatedb: не удается найти группу mlocate»:

# grep -s mlocate /etc/group || addgroup mlocate;chgrp mlocate /opt/var/mlocate;chmod g=rx,o= /opt/var/mlocate;chgrp mlocate /opt/bin/locate;chmod g+s,go-w /opt/bin/locate;touch /opt/var/mlocate/mlocate.db;chgrp mlocate /opt/var/mlocate/mlocate.db
8
27.01.2020, 20:17

для тех, у кого нет пакета addgroup.

вместо этого используйте эту командуsynogroup -add mlocate

grep -s mlocate /etc/group || synogroup -add mlocate
chgrp mlocate /opt/var/mlocate
chmod g=rx,o= /opt/var/mlocate
chgrp mlocate /opt/bin/locate
chmod g+s,go-w /opt/bin/locate
touch /opt/var/mlocate/mlocate.db
chgrp mlocate /opt/var/mlocate/mlocate.db
0
21.12.2020, 09:26

Теги

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