GNU/Linux >> Znalost Linux >  >> Linux

Jak používat `který` u aliasovaného příkazu?

Jako většina uživatelů mám nastavenou spoustu aliasů, které poskytují výchozí sadu příznaků pro často používané programy. Například,

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

Problém je v tom, že pokud chci použít which abych viděl, kde mám vim /grep /ls /etc přichází z, alias překáží:

$ which vim
vim: aliased to vim -X

Toto je užitečný výstup, ale ne to, co v tomto případě hledám; Znám vim má alias vim -X ale chci vědět, kde to vim pochází z.

Krátce k dočasnému zrušení definice aliasu, abych mohl použít which existuje snadný způsob, jak mít which ‚rozbalit‘ alias a spustit se na něm?

Upravit: Zdá se, že which je shell-builtin s různým chováním v různých shellech. V Bash, SiegeX návrh --skip-alias vlajková díla; nicméně jsem na Zsh. Existuje tam něco podobného?

Přijatá odpověď:

which je ve skutečnosti špatný způsob, jak dělat takové věci, protože vytváří odhady o vašem prostředí na základě $SHELL a spouštěcí soubory (myslí si), které shell používá; nejen, že někdy hádá špatně, ale obecně mu nemůžete říct, aby se choval jinak. (which na mém Ubuntu 10.10 nerozumí --skip-alias jak uvádí například @SiegeX.) type používá aktuální prostředí shellu místo toho, aby se šťoural do vašich konfiguračních souborů, a lze mu říct, aby ignoroval části tohoto prostředí, takže vám ukáže, co se skutečně stane, místo toho, co by se stalo při rekonstrukci vašeho výchozího shellu.

V tomto případě type -P obejde všechny aliasy nebo funkce:

$ type -P vim
/usr/bin/vim

Můžete jej také požádat, aby odloupl všechny vrstvy, jednu po druhé, a ukáže vám, co najde:

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

(Rozšíříme to z komentářů:)

Problém s which je, že je to obvykle externí program místo vestavěného shellu, což znamená, že nevidí vaše aliasy nebo funkce a musí se je pokusit rekonstruovat ze spouštěcích/konfiguračních souborů shellu. (Pokud je to vestavěný shell, jako je tomu v zsh ale zjevně ne bash , je pravděpodobnější, že použije prostředí shellu a udělá správnou věc.)

type je příkaz kompatibilní s POSIX, který se musí chovat, jako by byl vestavěný (to znamená, že musí používat prostředí shellu, ze kterého je vyvolán, včetně místních aliasů a funkcí), takže obvykle je em> vestavěný.

Související:Dávkový příkaz k odstranění souborů ze seznamu souborů?

Obecně se v csh nenachází /tcsh , ačkoli ve většině moderních verzí těch which je vestavěný shell a dělá správnou věc; někdy je vestavěný what místo toho a někdy není dobrý způsob, jak vidět aktuální prostředí shellu z csh /tcsh vůbec.


Linux
  1. Jak používat Su Command v Linuxu

  2. Jak používat příkaz basename?

  3. jak používat pylint ve vim

  1. Jak používat Telnet ve Windows

  2. Jak používat Linux Screen Command

  3. Jak přidat příkaz do editoru vim?

  1. Jak používat příkaz Disown v Linuxu

  2. Jak používat příkaz Linux SS

  3. Jak používat příkaz Linux nohup