Moja poranna kawa nie dotarła jeszcze do mojego mózgu, kiedy zapomniałem cytatów w:
alias grep="grep --color=always"
więc zamiast tego wpisałem:
alias grep=grep --color=always
pozostawiając mi:
--color=always
grep=grep
w moich pseudonimach.
Kiedy próbuję wyczyścić --color = zawsze używając unalias --color
, otrzymuję:
bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]
Próbowałem uciekać, cytować i błagać, ale nie mogę wymyślić, jak sprawić, by komandos unalias posprzątał bałagan.
(Wiem, że restart wykona lewę, ale na pewno musi być inny sposób)
bash
bash-alias
Wymagać
źródło
źródło
echo > \\?\c:\windows\x.
, lub tym razemrm -rf * ~
przez przypadek.Odpowiedzi:
Można uniknąć interpretacji myślników w poleceniach przez systemy zgodne z POSIX, dodając
--
przed wszelkimi argumentami.Działa to również z innymi narzędziami, powiedzmy, że masz plik o nazwie
-bla
. Jeśli spróbujesz go usunąćrm
, pojawi się następujący błąd:Używając
--
przed nazwą pliku, usuniesz plik:źródło
ls ./-bla
irm ./-bla
(lub określić pełne ścieżki, cokolwiek jest łatwiejsze w twoim przypadku). Oczywiście nie działa to jednak w przypadku aliasów!Po prostu użyj tej samej sztuczki, której użyłeś do ustawienia aliasu
źródło
unalias unalias --color
Szybkie rozwiązanie
Aby naprawić oba nieprawidłowe aliasy, możesz po prostu uruchomić
Zrozumienie, co się stało
Podajesz niewłaściwe polecenie
alias grep=grep --color=always
bez"..."
.Ustawiasz dwa aliasy
--color
igrep
; w rzeczy samej możesz to przeczytać po lewej stronie wyjścia (wszystko po lewej stronie=
polecenia aliasu):więc musisz usunąć oba.
Dlaczego tak się stało?
W
...
synoptyce aliasu oznacza, że możliwe jest wielokrotne przypisanie w jednym wierszu:Na wyjściu
help alias
możesz odczytać synoptyczne, aleman bash
możesz odczytać, że jest możliwe w tej samej linii nawet do listy i przypisania w tym samym czasie:Masz problemy z rozbrajaniem pierwszego
--color
samemu .To dlatego, że jest on interpretowany jako opcje dla
alias
przez powłokę; aby tego uniknąć, musisz powiadomić swojąbash
powłokę, że to, co następuje, nie jest opcją.Holy Grail Linux:
man
w tym przypadkuman bash
jest to kaseton wypełnione skarbami przydatnych w sytuacji jak ta.Możesz czytać z
man bash
:Jak podano w innej odpowiedzi, POSIX polega na użyciu kombinacji znaków specjalnych
--
.Ale dlaczego
unalias grep --color
działa? Mam na myśli bez użycia--
?Ponieważ działało
alias
nawet dlaunalias
, możliwe jest nadanie więcej niż jednego nazwiska na raz (ponownie[...]
).Mogę tylko zgadywać: dobrym nawykiem programistycznym jest pisanie procedur czytania i pisania w tym samym czasie, poniżej tej samej logiki. Tak musi być w przypadku procedur analizy opcji
alias
iunalias
.Że to działa, możesz zobaczyć nawet po tym poleceniu (z powłoki otwartej w tym celu), która nie usunie wszystkich twoich aliasów:
Uwaga końcowa
W sekcji BŁĘDY
man bash
pośród kilku zgłoszonych rzeczy, które możesz przeczytać:-)
źródło