Сортировка Unix не принимает нестандартный разделитель '±' в качестве разделителя полей

Каталог и то, что создано внутри, — это то, что представляет сообщение пользователю, когда он становится sudo, что обычно соответствует строкам:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things: 

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Файл каталога /var/db/sudo/lecturedдолжен принадлежать пользователю root, у которого есть uid 0, но в вашем случае это не так. Эта команда покажет вам право собственности:

ls -d /var/db/sudo/lectured

Поскольку он не принадлежит пользователю root, вам необходимо сменить владельца на root через:

chown root:root /var/db/sudo/lectured

Разрешения также должны быть 700. Вы можете изменить его на это, если необходимо, через:

chmod 700 /var/db/sudo/lectured

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

chown -R root /var/db/sudo/lectured

cdв папку и:

chmod 600 *
9
04.05.2020, 17:37
1 ответ

Если вы посмотрите на исходный код Apple macOS sort, он мало изменился по сравнению с источником FreeBSD .

В частности, вы найдете ту же неудобную/неправильную обработку опции -t, что и во FreeBSD .

            case 't':
                while (strlen(optarg) > 1) {
                    if (optarg[0] != '\\') {
                        errc(2, EINVAL, "%s", optarg);
                    }
                    optarg += 1;
                    if (*optarg == '0') {
                        *optarg = 0;
                        break;
                    }
                }

Как видите, аргумент -tпринимается только в том случае, если он пуст (, и в этом случае NUL является разделителем )или содержит один байт или начинается с любого количества \символов, за которыми следует либо один байт (, и в этом случае этот байт используется в качестве разделителя ), либо 0, за которым следует что-либо, и в этом случае разделителем является NUL.

Примеры:

  • -t ''или -t '\0', или -t '\\\\\0', или -t '\\0whateverограничивают символ NUL
  • -t '\t', -t '\\\t'ограничиваетt
  • -t '\', -t '\\\\\'разграничивает обратную косую черту.

В любом случае, разделитель может быть только одним байтом , эта загадочная дополнительная обработка, вероятно, только здесь, поэтому -t '\0'можно использовать для указания разделителя NUL для совместимости с GNUsort(FreeBSD. sortраньше был GNUsort)или, возможно, (, так как тот коммит , который даже не касался опции -t), так что -t '\\'также можно было использовать для указания \в качестве разделителя (не то, что GNU sortпринимает ).

Таким образом, вы не можете использовать многобайтовый -символ в качестве разделителя.

Не многие реализации sortдопускают многобайтовый символ -. GNU или busybox sortтоже этого не делают. ast -open sortделает это.

Здесь вы можете поменять местами ±одиночный -байтовый символ (, предпочтительно тот, который вряд ли появится во входных данных, чтобы он не влиял на сортировку )перед сортировкой и последующее восстановление. К счастью, FreeBSD trи, предположительно, macOS trтакже поддерживают многобайтовые -символы (, в отличие от GNU tr):

.
<input tr '±\1' '\1±' | sort -t $'\1'... | tr '±\1' '\1±'
27
28.04.2021, 23:16

Теги

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