He compilado la última versión de emacs del código fuente (v24.2) porque la versión instalada en mi máquina es (bastante) antigua para mí (v21.3). He hecho lo usual:
$configure --prefix=$HOME
make
make install
Ahora estoy probando emacs y me di cuenta de que todavía lanza la versión anterior ... mientras $HOME/bin
se supone que mi ruta anulará la del sistema (ya que se antepone a $ PATH en mi .bashrc
archivo).
Mi primer pensamiento fue ver la which
salida del comando. Y sorpresa, da el camino a los nuevos emacs. No puedo entender dónde está la discrepancia aquí. En la misma sesión, aquí están las diferentes salidas:
$ emacs --version
GNU Emacs 21.3.1
$ `which emacs` --version
GNU Emacs 24.2.1
No tengo un alias relacionado con emacs. En absoluto.
$ alias | grep emacs
$
¿Alguna idea de lo que está pasando por favor?
Respuestas:
Las tres posibilidades que me vienen a la mente:
emacs
(que has marcado)emacs
emacs
binario no está en la tabla hash PATH de su shell.Puede verificar si tiene una función
emacs
:Y eliminarlo:
Su shell también tiene una tabla hash PATH que contiene una referencia a cada binario en su PATH. Si agrega un nuevo binario con el mismo nombre que uno existente en otra parte de su RUTA, se debe informar al shell actualizando la tabla hash:
Explicación adicional:
which
no conoce las funciones, ya que no es un bash incorporado:Este nuevo script demuestra un nuevo comportamiento de tabla hash binaria.
Aunque no lo llamé,
which cat
siempre devolvería el primerocat
en mi RUTA, porque no usa la tabla hash del shell.fuente
type
comando.hash -r
solucionó mi problema.Sí, no uses cuál :
PATH
.Hay algo para eso. Dos, incluso:
type
ycommand
. La forma POSIX:En bash, también puede usar
type -p emacs
para ver solo la ruta de un comando externo.Sin embargo, aquí, en
which
realidad tiene razón. Bash mantiene información sobre la ubicación de un comando en la memoria, para que pueda ejecutar el comando más rápido la próxima vez. Has instalado un nuevoemacs
ejecutable en tuPATH
, pero bash todavía tiene la ubicación anterior en su caché. Ejecutehash emacs
para buscaremacs
nuevamente ohash -r
para vaciar el caché.fuente
¿Salió e inició sesión para
.bashrc
volver a leer su archivo de inicio de sesión actualizado ? De lo contrario, el entorno de su sesión actual no se ha actualizado.fuente
`which emacs` --version
estaría de acuerdo conemacs --version
, porquewhich
hereda su RUTA del shell actual.