` ls -d */ `не работает с одним конкретным каталогом

В дополнение к ответу, данному Руи Ф. Рибейро выше, я хотел бы внести update-alternativesв таблицу. Очень удобно управлять переключением между различными двоичными файлами, доступными для одной и той же программы.

Во-первых, проверьте, является ли установленный двоичный файл фактическим двоичным файлом в /usr/binили просто символической ссылкой. Это можно сделать с помощью ls -la, например:

$ ls -la $(which 7z)

# If it is a binary, it will look like this:
-rwxr-xr-x 1 root root 39 Aug 15  2016 /usr/bin/7z

# If a symlink, something like this:
lrwxrwxrwx 1 root root 20 Apr  9 12:58 /usr/bin/7z -> /some/another/path/7z

Если вы нашли двоичный файл, переместите его из текущего местоположения с помощью команды dpkg-divert:

$ sudo dpkg-divert --divert /usr/bin/7z.dist --rename /usr/bin/7z

Теперь вы можете использовать менеджер альтернатив. Команда имеет следующий формат:

$ sudo update-alternatives --install <link> <name> <path> <priority>

Добавить оба двоичных файла в группу альтернатив 7z:

$ sudo update-alternatives --install /usr/bin/7z 7z /usr/bin/7z.dist 10
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/local/share/PeaZip/res/7z/7z 20

Будет создана символическая ссылка по адресу /usr/bin/7z, указывающая на двоичный файл с наивысшим приоритетом в списке. Если по какой-либо причине вам нужно переключиться между двоичными файлами, просто сделайте это:

$ sudo update-alternatives --config 7z

Интерактивная подсказка спросит вас, какой двоичный файл использовать:

There are 2 choices for the alternative 7z (providing /usr/bin/7z).

  Selection    Path                                   Priority   Status
-------------------------------------------------------------------------
* 0            /usr/local/share/PeaZip/res/7z/7z       20        auto mode
  1            /usr/bin/7z.dist                        10        manual mode
  2            /usr/local/share/PeaZip/res/7z/7z       20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

Введите нужный номер Selectionи нажмите клавишу ввода. Сделанный! Преимущество этого подхода в том, что он применяет -ко всей системе и немедленно, включая все открытые сеансы оболочки. Нет необходимости манипулировать PATH,также упрощается возврат к исходному бинарному файлу, когда вам это нужно.

2
10.02.2020, 19:23
1 ответ

Похоже, у вас есть каталог с именем -, который lsпытается разобрать как последовательность опций (или переключателей ):

.
$ mkdir -- -
$ ls -d */
ls: unknown option -- /
$ -ls -d -- */
-/

Многие базовые инструменты используют специальный переключатель --, что означает «Больше никаких переключателей; все, что дальше, является обычным аргументом».

Остерегайтесь использования подстановочных знаков:

$ touch -- foo -i
$ ls
-i    foo
$ ls *
2251799814054385 foo

Только представьте себе хаос, который может возникнуть, если вы используете rmи в вашем текущем рабочем каталоге есть файл с именем -fr.

4
28.04.2021, 23:23

Теги

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