GNU/Linux >> Linux Esercitazione >  >> Linux

Come usare `quale` su un comando con alias?

Come la maggior parte degli utenti, ho un sacco di alias impostati per fornire un set predefinito di flag per i programmi utilizzati di frequente. Ad esempio,

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

Il problema è che se voglio usare which per vedere dove sono i miei vim /grep /ls /etc proviene da, l'alias si intromette:

$ which vim
vim: aliased to vim -X

Questo è un output utile, ma non quello che sto cercando in questo caso; Conosco vim è alias di vim -X ma voglio sapere dove quello vim proviene da.

A meno di non definire temporaneamente l'alias solo così posso usare which su di esso, c'è un modo semplice per avere which "srotolare" l'alias ed eseguirlo da solo?

Modifica: Sembra che which è una shell incorporata con comportamenti diversi su diverse shell. In Bash, il suggerimento di SiegeX del --skip-alias lavori di bandiera; tuttavia, sono su Zsh. Esiste qualcosa di simile lì?

Risposta accettata:

which in realtà è un brutto modo per fare cose del genere, poiché fa ipotesi sul tuo ambiente in base a $SHELL e i file di avvio (pensa) utilizzati dalla shell; non solo a volte indovina male, ma generalmente non puoi dirgli di comportarsi diversamente. (which sul mio Ubuntu 10.10 non capisce --skip-alias come menzionato da @SiegeX, per esempio.) type usa l'ambiente della shell corrente invece di cercare i tuoi file di configurazione e può essere detto di ignorare parti di quell'ambiente, quindi ti mostra cosa accadrà effettivamente invece di cosa accadrebbe in una ricostruzione della tua shell predefinita.

In questo caso, type -P ignorerà qualsiasi alias o funzione:

$ type -P vim
/usr/bin/vim

Puoi anche chiedergli di staccare tutto i livelli, uno alla volta, e mostrarti cosa troverebbe:

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

(Espandendosi su questo dai commenti:)

Il problema con which è che di solito è un programma esterno invece di un built-in della shell, il che significa che non può vedere i tuoi alias o funzioni e deve provare a ricostruirli dai file di avvio/config della shell. (Se è una shell integrata, come in zsh ma apparentemente non bash , è più probabile che utilizzi l'ambiente della shell e faccia la cosa giusta.)

type è un comando conforme a POSIX che deve comportarsi come se fosse un built-in (ovvero, deve utilizzare l'ambiente della shell da cui viene invocato includendo alias e funzioni locali), quindi di solito è un built-in.

Correlati:comando batch per eliminare i file dall'elenco dei file?

In genere non si trova in csh /tcsh , sebbene nella maggior parte delle versioni moderne di quelle which è una shell incorporata e fa la cosa giusta; a volte il built-in è what invece, e talvolta non c'è un buon modo per vedere l'ambiente della shell corrente da csh /tcsh affatto.


Linux
  1. Come usare il comando Su in Linux

  2. Come utilizzare il comando basename?

  3. Come utilizzare il comando dello schermo di Linux

  4. come usare pylint in vim

  5. Come aggiungere un comando nell'editor vim?

Come usare il comando head

Come usare il comando PS

Come usare il comando TOP

Come utilizzare il comando di arresto di Linux

Come usare grep in Linux

Come utilizzare il comando which in Linux