GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo usar `cuál` en un comando con alias?

Como la mayoría de los usuarios, tengo un montón de alias configurados para dar un conjunto predeterminado de banderas para los programas de uso frecuente. Por ejemplo,

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

El problema es que si quiero usar which para ver dónde está mi vim /grep /ls /etc proviene, el alias interfiere:

$ which vim
vim: aliased to vim -X

Esta es una salida útil, pero no es lo que estoy buscando en este caso; Sé vim tiene el alias de vim -X pero quiero saber donde eso vim viene.

A falta de desdefinir temporalmente el alias solo para poder usar which en él, ¿hay alguna manera fácil de tener which ¿'desenvolver' el alias y ejecutarse en él?

Editar: Parece que which es un shell integrado con diferentes comportamientos en diferentes shells. En Bash, la sugerencia de SiegeX del --skip-alias obras de bandera; sin embargo, estoy en Zsh. ¿Existe algo similar allí?

Respuesta aceptada:

which en realidad es una mala manera de hacer cosas como esta, ya que hace conjeturas sobre su entorno en función de $SHELL y los archivos de inicio (cree) que usa el shell; no solo a veces adivina mal, sino que generalmente no puedes decirle que se comporte de manera diferente. (which en mi Ubuntu 10.10 no entiende --skip-alias como lo menciona @SiegeX, por ejemplo.) type utiliza el entorno de shell actual en lugar de hurgar en sus archivos de configuración, y se le puede indicar que ignore partes de ese entorno, por lo que le muestra lo que realmente sucederá en lugar de lo que sucedería en una reconstrucción de su shell predeterminado.

En este caso, type -P omitirá cualquier alias o funciones:

$ type -P vim
/usr/bin/vim

También puede pedirle que despegue todo las capas, una a la vez, y le mostrará lo que encontraría:

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

(Expandiendo esto de los comentarios:)

El problema con which es que generalmente es un programa externo en lugar de un shell integrado, lo que significa que no puede ver sus alias o funciones y tiene que intentar reconstruirlos a partir de los archivos de inicio/configuración del shell. (Si es un shell integrado, como lo es en zsh pero aparentemente no bash , es más probable que use el entorno del shell y haga lo correcto).

type es un comando compatible con POSIX que debe comportarse como si fuera un comando integrado (es decir, debe usar el entorno del shell desde el que se invoca, incluidos los alias y las funciones locales), por lo que generalmente es un incorporado.

Relacionado:¿Comando por lotes para eliminar archivos de la lista de archivos?

Generalmente no se encuentra en csh /tcsh , aunque en la mayoría de las versiones modernas de aquellos which es un shell incorporado y hace lo correcto; a veces el incorporado es what en cambio, y a veces no hay una buena manera de ver el entorno del shell actual desde csh /tcsh en absoluto.


Linux
  1. Cómo usar el comando Su en Linux

  2. ¿Cómo usar el comando basename?

  3. Cómo usar el comando de pantalla de Linux

  4. cómo usar pylint en vim

  5. ¿Cómo agregar un comando en el editor vim?

Cómo usar el comando principal

Cómo usar el comando PS

Cómo usar el comando SUPERIOR

Cómo usar el comando de apagado de Linux

Cómo usar grep en Linux

Cómo usar el comando which en Linux