GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwendet man „what“ für einen Alias-Befehl?

Wie die meisten Benutzer habe ich eine Reihe von Aliasen eingerichtet, um einen Standardsatz von Flags für häufig verwendete Programme bereitzustellen. Zum Beispiel

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'

Das Problem ist, dass, wenn ich which verwenden möchte um zu sehen, wo mein vim ist /grep /ls /etc kommt, der Alias ​​steht im Weg:

$ which vim
vim: aliased to vim -X

Dies ist eine nützliche Ausgabe, aber in diesem Fall nicht das, wonach ich suche. Ich kenne vim wird zu vim -X aliasiert aber ich will wissen wo das vim kommt aus.

Ohne den Alias ​​vorübergehend zu de-definieren, nur damit ich which verwenden kann gibt es eine einfache Möglichkeit, which zu haben den Alias ​​‚auspacken‘ und sich selbst darauf ausführen?

Bearbeiten: Es scheint, dass which ist ein Shell-Built-In mit unterschiedlichen Verhaltensweisen in verschiedenen Shells. In Bash, SiegeX’ Vorschlag des --skip-alias Flagge funktioniert; Ich bin jedoch auf Zsh. Gibt es dort etwas Ähnliches?

Akzeptierte Antwort:

which ist eigentlich ein schlechter Weg, um solche Dinge zu tun, da es auf der Grundlage von $SHELL Vermutungen über Ihre Umgebung anstellt und die Startdateien (denkt sie), die die Shell verwendet; Es rät nicht nur manchmal falsch, sondern Sie können ihm im Allgemeinen nicht sagen, dass es sich anders verhalten soll. (which auf meinem Ubuntu 10.10 versteht --skip-alias nicht wie zum Beispiel von @SiegeX erwähnt.) type verwendet die aktuelle Shell-Umgebung, anstatt in Ihren Konfigurationsdateien herumzustochern, und kann angewiesen werden, Teile dieser Umgebung zu ignorieren, sodass es Ihnen zeigt, was tatsächlich passieren wird, anstatt was bei einer Rekonstruktion Ihrer Standard-Shell passieren würde.

Geben Sie in diesem Fall type -P ein umgeht alle Aliase oder Funktionen:

$ type -P vim
/usr/bin/vim

Sie können es auch bitten, alles abzuziehen die Ebenen nacheinander und zeigen Ihnen, was es finden würde:

$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim

(Erweitern Sie dies aus den Kommentaren:)

Das Problem mit which ist, dass es normalerweise ein externes Programm anstelle einer eingebauten Shell ist, was bedeutet, dass es Ihre Aliase oder Funktionen nicht sehen kann und versuchen muss, sie aus den Start-/Konfigurationsdateien der Shell zu rekonstruieren. (Wenn es sich um eine eingebaute Shell handelt, wie es in zsh der Fall ist aber anscheinend nicht bash , ist es wahrscheinlicher, die Umgebung der Shell zu verwenden und das Richtige zu tun.)

type ist ein POSIX-kompatibler Befehl, der sich so verhalten muss, als wäre er eingebaut (d. h. er muss die Umgebung der Shell verwenden, von der er aufgerufen wird, einschließlich lokaler Aliase und Funktionen), also ist ein eingebautes.

Verwandt:Stapelbefehl zum Löschen von Dateien aus der Dateiliste?

Es wird im Allgemeinen nicht in csh gefunden /tcsh , obwohl in den meisten modernen Versionen dieser which ist eine eingebaute Shell und macht das Richtige; manchmal ist das eingebaute which stattdessen, und manchmal gibt es keine gute Möglichkeit, die Umgebung der aktuellen Shell von csh aus zu sehen /tcsh überhaupt.


Linux
  1. So verwenden Sie den Su-Befehl unter Linux

  2. Wie verwende ich den basename-Befehl?

  3. So verwenden Sie den Linux-Bildschirmbefehl

  4. wie man pylint in vim verwendet

  5. Wie füge ich einen Befehl im vim-Editor hinzu?

Wie man den Head-Befehl verwendet

So verwenden Sie den PS-Befehl

So verwenden Sie den TOP-Befehl

So verwenden Sie den Befehl zum Herunterfahren von Linux

So verwenden Sie grep unter Linux

So verwenden Sie den which-Befehl in Linux