Посмотрите расширенные атрибуты с coreutils ls на Mac

Предыдущий текст заголовка не должен быть обработан. Ожидайте будет ожидать, пока одно из условий не соблюдают (как соответствие string/regexp или таймаут). Текст перед ним буферизуется для возможного, позже используют, но не часть соответствия. То, что необходимо обработать, ищет строку приглашения: local-login [/home/user]%. Если у Вас будет хорошая идея, на что это может быть похожим (например, то будет всегда иметь' [' каталог'] % ', то можно записать регулярное выражение для соответствия против этого:

.*\[(/[^/]+)+\]%

Удостоверьтесь, что у Вас нет новой строки/возврата каретки в регулярном выражении, так как вывод не будет иметь того.

4
07.09.2019, 06:20
2 ответа

Я полагаю, что комментарий Mark Cohen’s корректен: эта функциональность, кажется, отсутствует в coreutils версии ls. У меня на самом деле не было серьезного основания использовать coreutils ls, таким образом, я переключился назад на встроенную версию BSD.

1
27.01.2020, 20:58

Вы можете добавлять расширенные атрибуты к coreutils ls. Это основано на коде coreutils-8.22:

***************
*** 59,62 ****
--- 59,64 ----
  #include <wchar.h>

+ #include <sys/xattr.h>
+
  #if HAVE_LANGINFO_CODESET
  # include <langinfo.h>
***************
*** 3056,3059 ****
--- 3058,3062 ----
                              : ACL_T_YES));
            any_has_acl |= f->acl_type != ACL_T_NONE;
+           any_has_acl |= listxattr(f->name, NULL, 0, XATTR_NOFOLLOW);

            if (err)
***************
*** 3811,3814 ****
--- 3814,3819 ----
    if (! any_has_acl)
      modebuf[10] = '\0';
+   else if (listxattr(f->name, NULL, 0, XATTR_NOFOLLOW) > 0)
+     modebuf[10] = '@';
    else if (f->acl_type == ACL_T_SELINUX_ONLY)
      modebuf[10] = '.';

В основном я искал в источнике OS X ls логику распечатки @ (вызов listxattr) и подключил ее к тому месту, куда coreutils ls помещает символ после разрешения. Три изменения:

  1. Включая xattr. h
  2. Установите any_has_acl, если какой-либо из списков имеет расширенные атрибуты - это необходимо для того, чтобы в списках, не имеющих расширенных атрибутов, после разрешения на выстраивание в линию был вставлен пробел
  3. Выполните фактическую проверку, вызвав listxattr и условно установив символ @ - возможно, стоит отметить, что при записи таким образом будет показано только @, если есть и расширенные атрибуты, и ACL

Аргумент XATTR_NOFOLLOW говорит listxattr, чтобы не следовать по симлинкам. Этот аргумент используется в OS X ls.

.
2
27.01.2020, 20:58

Теги

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