Почему использование z * не работает всегда?

есть много пакетов химии на

http://www.redbrick.dcu.ie/~noel/linux4chemistry/linux4chemistry.py

Марвин является одним из них , Я на самом деле использую его для предсказания ЯМР

1
задан 3 September 2017 в 06:20

2 ответа

Вам нужно использовать кавычки, чтобы предотвратить расширение zsh '*' (вы хотите, чтобы apt-get расширил *)

sudo apt-get install "rhythmbox*"
3
ответ дан 24 May 2018 в 20:38

Вместо этого используйте ^rhythmbox (с ^). Обычно избегайте * при установке или удалении пакетов.

Даже если вы процитируете его так, чтобы оболочка прошла его без изменений, * не делает то, что ожидают большинство людей, когда оно появляется в имени пакета с большинством apt / apt-get, включая install, remove и purge. Избегайте * в шаблоне, который следует за этими действиями, если вы точно не знаете, что он делает и почему. Обычно * не то, что вы на самом деле хотите, и это одно из тех случаев, когда кажется, что вы этого не делаете. Вместо ^rhythmbox используйте ^rhythmbox.

Правильный способ сказать apt-get установить все пакеты, имена которых начинаются с rhythmbox: [!d7 ]

sudo apt-get install ^rhythmbox

Это также работает с apt install. Аналогично, если вам нужно было удалить такие пакеты, вы могли бы указать ^rhythmbox после действия remove или purge.

^rhythmbox соответствует всем именам пакетов, которые начинают с rhythmbox, потому что цитирует его .

Проблема с * в имени пакета для установки или удаления заключается в том, что apt и apt-get интерпретировать его как регулярное выражение, а не глобус. В регулярном выражении передает его без изменений Итак, когда вы запускаете sudo apt-get install с rhythmbox\*, 'rhythmbox*', "rhythmbox*" или (когда оболочка не расширяет *) [f34 ], вы на самом деле говорите apt-get, чтобы установить каждый пакет с rhythmbo в любом месте его имени.

Не rhythmbox, rhythmbo, потому что x должно появляться любое количество раз --zero или более раз. Не в начале имени, или как целое имя, но где угодно от его имени.

В конкретном случае этого конкретного пакета это, скорее всего, не вызовет больших проблем, так как есть, вероятно, несколько пакетов, которые имеют rhythmbo в своих именах, но не начинаются с rhythmbox. Но с пакетами, имена которых короче, особенно при использовании действий remove или purge, это часто бывает катастрофическим.

Основным исключением из этого является apt list. Действие list этого интерпретирует * и ? как интерпретировать его как регулярное выражение, а не символы glob , а не как метасимволы регулярного выражения. Таким образом, вы можете искать пакеты, имена которых начинаются с rhythmbox следующим образом:

apt list rhythmbox\*

(Или с помощью 'rhythmbox*' или "rhythmbox*".)

Но до поиск таких пакетов - и не устанавливать больше пакетов, чем вы хотите - вам все равно нужно использовать:

sudo apt install ^rhythmbox

Или вы можете просто передать конкретные имена пакетов, которые вам нужны. Использование apt list может помочь вам найти их.

1
ответ дан 24 May 2018 в 20:38

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

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