Список не работает должным образом. (Ubuntu 18.04, zsh и bash)

У меня проблемы с перечислением пакетов с использованием apt в Ubuntu 18.04 с использованием zsh или bash.

Вот сценарий:

В прошлом я мог перечислить все пакеты в моей системе с apt list * или подмножество этих пакетов с apt list *partial-name* и т. Д. Однако, теперь, если я сделаю это , ничего не покажет. apt list будет показывать пакеты, только если я явно напишу их имена. т.е. если я ищу build-essential и ввожу apt list build-essen*, в списке не будет выходных данных. Однако, если я напишу apt list build-essential, он отобразит только один пакет (как и ожидалось).

Если у кого-нибудь есть какие-либо советы, как это исправить, будет очень признателен, спасибо!

2
задан 28 June 2018 в 17:15

1 ответ

Многие оболочки, такие как bash или zsh, не просто передают ввод через вызываемую программу. Вместо этого выполняется несколько расширений и замен. Чтобы дать вам представление, bash выполняет восемь различных видов расширений .

Например, давайте посмотрим на что-то вроде ls my_fi*.txt. С помощью этой команды bash будет делать то, что называется «расширением пути». Если в вашем текущем каталоге есть файл с именем my_file.txt, оболочка расширит команду до ls my_file.txt. Программа ls никогда не видит параметр my_fi*.txt, она получает только расширенную версию.

Итак, когда вы наберете apt list *, * будет заменен списком файлов в вашем текущем каталоге, и это то, что apt list получит в качестве ввода. Вы в основном фильтруете список пакетов по аргументам, которые вы не намеревались использовать.

Чтобы сохранить bash (я думаю, что zsh работает аналогично) от всего, что расширяет и подставляет, вы можете замаскировать специальные символы, которые «запускают» процесс. Таким образом, они передаются apt list (или любой другой программе, которую вы вызываете) без изменений.

Чтобы замаскировать персонажа, вы можете поставить обратную косую черту перед ним

apt list \*

или вы можете поместить весь аргумент в кавычки

apt list '*'

Вы можете заметить, что первый метод применяется к одному символу

apt list my_packa\*

второй метод применяется ко всему аргументу

apt list "my_packa*"
2
ответ дан 28 June 2018 в 17:15

Другие вопросы по тегам:

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