Czy mogę sprawić, aby bash przestał analizować i sprawdzać poprawność określonego aliasu?


8

Używam Fedory 25 i dodałem następujący alias do mojego profilu bash:

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

(Nie mogę korzystać bezpośrednio z dnf updateinfo infopowodu https://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

Mój alias działa, ale uruchomienie polecenia zajmuje około 10 sekund, a ponieważ bash analizuje i sprawdza poprawność wszystkich aliasów podczas pobierania profilu, utworzenie nowej powłoki powoduje 10-sekundowe zawieszenie. To denerwujące.

Czy jest jakiś sposób, aby bash nie próbował parsować i sprawdzać poprawności aliasów - czy tylko tego?

Odpowiedzi:


9

Myślę, że powinieneś prawdopodobnie używać pojedynczych cudzysłowów wokół definicji aliasu.

Wiem, że podczas używania podwójnych cudzysłowów zmienne powłoki są zastępowane ich zawartością na etapie definiowania aliasu (tak jak powiedziałeś podczas analizowania i sprawdzania poprawności) oraz zwrotami wstecznymi lub substytucją powłoki jak $ (polecenie).

Lepszym wyjaśnieniem jest pytanie dotyczące Unix SE !

Jeśli to nie pomoże w szybszym ładowaniu pytania, zdefiniuj funkcję powłoki zamiast aliasu.

edycja: Nie zapomnij zamienić wyciętego argumentu na cudzysłowy, takie jak wspomniany quixotic.


To zrobiło! Najpierw odpowiedziałeś, więc dostałeś kredyt.
iLikeDirt,

9

bashinterpretuje cytowany ciąg, a ta interpretacja wykonuje osadzone dnf check-updatepolecenie. To wykonanie zajmuje czas podczas definiowania aliasu, a nie główne dnf updateinfopolecenie, które aliasingujesz. Spróbuj skonstruowanego przykładu opartego na sleepi zwróć uwagę, jak aliassamo to zajmuje 5 sekund:

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

Użyj pojedynczych cudzysłowów, aby uniknąć interpretacji:

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

Nie zapomnij zamienić cutargumentu na podwójne cudzysłowy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.