Могу ли я заставить bash прекратить анализ и проверку определенного псевдонима?

787
iLikeDirt

Я использую Fedora 25 и добавил следующий псевдоним в свой профиль bash:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less" 

(Я не могу использовать прямо dnf updateinfo infoиз-за https://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

Мой псевдоним работает, но выполнение команды занимает около 10 секунд, и поскольку bash анализирует и проверяет все псевдонимы при получении профиля, создание новой оболочки приводит к 10-секундному зависанию. Это раздражает.

Есть ли способ заставить bash не пытаться анализировать и проверять псевдонимы - или только этот?

8

2 ответа на вопрос

9
hyph

Мое лучшее предположение, что вы должны использовать одинарные кавычки вокруг определения псевдонима.

Я знаю, что при использовании двойных кавычек переменные оболочки заменяются их содержимым на этапе определения псевдонима (как вы сказали, анализ и проверка) и обратными галочками или заменой оболочки, например, $ (команда).

Лучшее объяснение в этом вопросе Unix SE !

Если это не помогает снова ускорить загрузку, определите функцию оболочки вместо псевдонима.

edit: не забудьте поменять аргумент cut на двойные кавычки, как упоминалось в quixotic.

Это сделал это! Вы ответили первым, так что вы получите кредит. iLikeDirt 7 лет назад 0
9
quixotic

bashинтерпретирует вашу строку в кавычках, и эта интерпретация выполняет встроенную dnf check-updateкоманду. Это выполнение - то, что занимает время во время определения псевдонима, а не основная dnf updateinfoкоманда, которую вы называете псевдонимом. Попробуйте надуманный пример на основе sleepи обратите внимание, что aliasсамо по себе это занимает 5 секунд:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'" 

Используйте одинарные кавычки, чтобы избежать интерпретации:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less' 

Не забудьте поменять cutаргумент на двойные кавычки.