Предыдущий текст заголовка не должен быть обработан. Ожидайте будет ожидать, пока одно из условий не соблюдают (как соответствие string/regexp или таймаут). Текст перед ним буферизуется для возможного, позже используют, но не часть соответствия. То, что необходимо обработать, ищет строку приглашения: local-login [/home/user]%
. Если у Вас будет хорошая идея, на что это может быть похожим (например, то будет всегда иметь' [' каталог'] % ', то можно записать регулярное выражение для соответствия против этого:
.*\[(/[^/]+)+\]%
Удостоверьтесь, что у Вас нет новой строки/возврата каретки в регулярном выражении, так как вывод не будет иметь того.
Я полагаю, что комментарий Mark Cohen’s корректен: эта функциональность, кажется, отсутствует в coreutils версии ls
. У меня на самом деле не было серьезного основания использовать coreutils ls
, таким образом, я переключился назад на встроенную версию BSD.
Вы можете добавлять расширенные атрибуты к 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
помещает символ после разрешения. Три изменения:
xattr. h
any_has_acl
, если какой-либо из списков имеет расширенные атрибуты - это необходимо для того, чтобы в списках, не имеющих расширенных атрибутов, после разрешения на выстраивание в линию был вставлен пробелlistxattr
и условно установив символ @
- возможно, стоит отметить, что при записи таким образом будет показано только @
, если есть и расширенные атрибуты, и ACLАргумент XATTR_NOFOLLOW
говорит listxattr
, чтобы не следовать по симлинкам. Этот аргумент используется в OS X ls
.