Чи можу я змусити bash зупинити розбір і перевірити певний псевдонім?


8

Я використовую Fedora 25 і додав наступний псевдонім до мого баш-профілю:

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 не спробувати розібратися та перевірити псевдоніми - чи просто цей?

Відповіді:


9

Моя найкраща здогадка - ви, ймовірно, повинні використовувати одинарні лапки навколо визначення псевдоніма.

Я знаю, що при використанні подвійних лапок змінні оболонки замінюються їх вмістом на етапі визначення псевдоніму (як ви сказали, розбір і перевірка) та зворотними посиланнями або заміною оболонки, як $ (команда).

Краще пояснення - у цьому питанні Unix SE !

Якщо це не допомагає знову зробити швидке завантаження, визначте функцію оболонки замість псевдоніму.

редагувати: Не забудьте поміняти аргумент вирізання на подвійні лапки на зразок згаданих кіксоти.


Це зробили! Ви відповіли спочатку, тож отримаєте кредит.
iLikeDirt

9

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аргумент на подвійні лапки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.