Uruchom polecenie z cieniem aliasu


163

Powiedzmy, że mam następujący alias w bash - alias ls='ls --color=auto'- i chcę zadzwonić zwyczajnie lsbez opcji. Czy jedynym sposobem na to jest odblokowanie, wykonanie polecenia, a następnie ponowne wygenerowanie aliasu? A może jest jakiś fajny trik lub obejście?


2
Uwaga na niektóre z poniższych odpowiedzi: „polecenie” jest JEDYNYM bezpiecznym sposobem na osiągnięcie tego. Na przykład „.” lub wbudowane „źródło” może zostać zastąpione przez funkcję zdefiniowaną w skrypcie. "Komenda ." lub „źródło poleceń” jest jedynym sposobem na bezpieczne wykonanie źródła bez wywoływania funkcji zdefiniowanej w skrypcie. Żadna inna alternatywa, w tym metoda odwrotnego ukośnika „\.”, Nie działa, i oczywiście nie ma alternatywy „/ bin / source”, którą można wywołać, podając pełną ścieżkę.
Dejay Clayton,

Odpowiedzi:


209

Możesz także poprzedzić ukośnik odwrotny, aby wyłączyć alias: \ls

Edycja: Inne sposoby robienia tego samego obejmują:

Użyj „polecenia”: command lsjak na Mikela .

Użyj pełnej ścieżki: /bin/lsjak na inny .

Cytuj polecenie: "ls"lub 'ls'zgodnie z komentarzem Mikela.

Możesz tymczasowo usunąć alias dla tej sesji terminala za pomocą unalias command_name.


To jest mój standardowy sposób, aby to zrobić.
ncmathsadist

bardzo ładny, działa również dobrze z tcsh
Levon

10
Ten sposób jest bardzo przydatny. Pomija tylko aliasy, a nie funkcje, co odróżnia je od commandlub builtin.
Mikel

1
Wygląda na to, że l\srobi to samo. Czy to zachowanie jest błędem czy cechą?
Niklas B.,

4
To „funkcja”. Rozszerzone są tylko niecytowane aliasy. Możesz umieścić go w cudzysłowie lub użyć ukośnika w dowolnym miejscu. Zobacz odwołanie do aliasów bash .
Mikel

79

Po to commandjest polecenie.

Próbować

command ls

To każe powłoce ominąć aliasy i funkcje.

Ten sposób jest obsługiwany przez bash , zsh i ash / dash.


2
Najlepsza odpowiedź, dlaczego nie jest to najbardziej uprzywilejowane? :) +1
0xC0000022L

11
Ponieważ dodaje 8-krotną liczbę znaków jako metodę odwrotnego ukośnika
JoelFan

1
@STATUS_ACCESS_DENIED To również nie działa z tcsh (a zatem prawdopodobnie nie z csh). Metoda `\ 'działa
Levon

3
Funkcja ukośnika odwrotnego nie jest bezpieczna. Chociaż zapewnia ochronę przed aliasami o podobnych nazwach, nie zapewnia ochrony przed funkcjami o podobnych nazwach.
Dejay Clayton

2
@ JoelFan Wolałbym mieć kilka dodatkowych znaków, a moje skrypty były łatwe do naśladowania i działały dla wszystkich. Zamiast tajemniczego slashu, który nie jest intuicyjny, łatwy do przeoczenia, słabo udokumentowany i nie działa w celu ominięcia funkcji.
Dennis

19

Alias ​​jest tylko zdefiniowanym skrótem. W tym przykładzie zdefiniowanym aliasem jest ciąg znaków ls, który jest wykonywany ls --color=auto. Jeśli nie chcesz tego zachowania, możesz wywołać plik binarny lsprzy użyciu ścieżki bezwzględnej.

Więc wykonanie po prostu /bin/lsda wynik bez koloru, ponieważ nie jest to zdefiniowany alias.

Możesz także zmienić alias na coś innego lub dodać nowy alias, który będzie wykonywany lsbez parametrów koloru.


2
Musisz wiedzieć, gdzie jest polecenie. W niektórych systemach podział na /bini /usr/binjest arbitralny.
Keith Thompson

@KeithThompson W tym celu można użyć whichniektórych poleceń: which ls.
cst1992

@ cst1992: Jeśli zamierzasz użyć which(lub type), wyszukuje za pośrednictwem $PATH; równie dobrze możesz po prostu użyć lslub \lszamiast określać ścieżkę.
Keith Thompson,

10

Innym sposobem, w oparciu o odpowiedź @ uther, jest użycie $(which ...)lub `which ...`(użycie backticks ``), aby automatycznie znaleźć ścieżkę pliku wykonywalnego. Będzie to działać w bash:

$(which ls)

`which ls`

Niewątpliwie po prostu poprzedzenie polecenia znakiem \jest znacznie krótsze.

AKTUALIZACJA : Zgodnie z tym, jak używać „które” w aliasowanym poleceniu? , to wcale nie wydaje się wiarygodne.


Do czego służą nawiasy? Chyba masz na myśli `which ls`bezpośrednie wykonanie pliku binarnego.
amyassin

2
@amyassin: Obie składnie są równoważne. (BTW, jak udało Ci się wprowadzić backticks do formatowania kodu?)
krlmlr

Właściwie (which ls)to nie działało dla mnie (na Ubuntu 12.04 LTS) I backty były ciężkie, po prostu ich uniknąłem: \ `ls \ '.
Dotarcie

1
@ user946850 „Aby uwzględnić dosłowny znak backtick w zakresie kodu, możesz użyć wielu znaków backtick jako ograniczników otwierających i zamykających”. Źródło: Markdown Reference .
Mikel

@amyassin: Dodałeś $?
krlmlr

2

Osobiście po prostu unikam definiowania aliasów o takich samych nazwach jak polecenia, więc lszawsze wywołuje właściwe polecenie. Mam aliasy lub funkcji dla różnych kombinacji opcji, takich jak l, lli lg. (Oznacza to, że potrzebuję unalias lsw moim .bashrclub .cshrc.)

Uważam, że założenia systemu operacyjnego dotyczące preferowanych przeze mnie opcji (przesłaniające założenia projektantów samego lspolecenia) rzadko odpowiadają moim osobistym upodobaniom. Zdarza mi się nie podobać wygląd ls --color=auto, a jego czytelność może się znacznie różnić od czarno-białej do biało-czarnej.

YMMV i inne rozwiązania są oczywiście nadal dobrze znane.


1

Wydaje się, że wpisanie polecenia wielkimi literami działa LS, chociaż nie jestem do końca pewien, dlaczego.


4
W jakiej powłoce, który system operacyjny, który terminal itp.?
Mikel

@Mikel Istnieje pakiet „sl”, który zapewnia „sl” jako „ls”. Wskazówki, które daje bash w Ubuntu, mówią również, że „LS” jest zapewnione przez „sl”.
Izkata

1
To jest bash 4 (zainstalowany z Fink) w Mac OS X 10.7. Działa również w przypadku innych poleceń, które aliasowałem, takich jak rm i grep.
asmeurer

3
To tylko żart :) ze strony mn:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
Myślę, że działa to w systemie Mac OS X, ponieważ jego system plików domyślnie nie rozróżnia wielkości liter. Nie będzie działać na innych uniksach.
Jander
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.