Это было вызвано обработкой команды not-found в Fedora.
Выполнение неизвестной команды (включая ...
и т.д., если не совпадает псевдоним) приводит к запуску command_not_found_handle
с отсутствующей командой в качестве параметра (см. определение /etc/profile.d/PackageKit.sh
). В данном сценарии обработчик запускает /usr/libexec/pk-command-not-found
, снова с отсутствующей командой в качестве параметра. Ранее pk-command-not-found
просто игнорировал любую команду, начинающуюся с .
:
if (argv[1][0] == '.')
goto out;
и завершалась с кодом 127.
Это поведение было введено для исправления Red Hat #1151185, также упоминается в Bash does not print any error msg upon non-existing commands starting with dot, и имеет ошибку, требующую исправления (Red Hat #1292531). В основном она была исправлена в FC 27 с обновлениями, начиная с PackageKit 1.1.8 (см. this commit): теперь команды с ведущими точками обрабатываются, только .
и .
игнорируются.
Нет, вам не хватает простой опции, позволяющей отказаться от строки total
, по крайней мере, при перечислении содержимого каталога (включая текущий, без аргументов). Например, в GNU ls
опции -l
, -g
, -n
, -o
и -s
вызывают отображение строки total
без возможности ее отключения:
if (format == long_format || print_block_size)
{
const char *p;
char buf[LONGEST_HUMAN_READABLE + 1];
DIRED_INDENT ();
p = _("total");
DIRED_FPUTS (p, stdout, strlen (p));
DIRED_PUTCHAR (' ');
p = human_readable (total_blocks, buf, human_output_opts,
ST_NBLOCKSIZE, output_block_size);
DIRED_FPUTS (p, stdout, strlen (p));
DIRED_PUTCHAR ('\n');
}
Это фактически предписано POSIX.
Однако, если вы укажете файлы для списка, а не каталог, ls
не покажет общее количество; опция -d
заставляет рассматривать каталоги как файлы, что дает желаемый результат, как упоминал Костас:
ls -ld *
выдаст тот же результат, что и
ls -l
за вычетом строки total
, если ваша оболочка не включает скрытые файлы при расширении *
(dotglob
) и если текущий каталог не содержит так много файлов, что расширение *
превышает максимальную длину командной строки.
Вы можете указать и каталог (ls -ld /path/to/directory/*
), но в результате будут перечислены файлы с заданным путем, в отличие от ls -l /path/to/directory
.