Considere la función de bash:
func() {
cd /;
echo test;
}
Llamarlo hace lo que cabría esperar:
~:>func
test
/:>
Pero cuando se llama desde una subshell (p. Ej., Utilizando backticks o $ ()) se ejecuta de manera muy extraña.
~:>func() { cd /; echo test; }
~:>echo $(func)
test Saving session... ...saving history...truncating history files... ...completed.
~:>
Este problema no aparece si cd
No se ejecuta en la función:
~:>func() { echo test; }
~:>echo $(func)
test
~:>
Esto está causando problemas con algunos scripts que dependen de cierto comportamiento de salida, por ejemplo, CLASSPATH=$(func)
dónde func
Es complejo y requiere el uso de cd
.
Lo que es extraño es que esto funcionó bien antes. No comenzó a suceder hasta hace poco, pero no sé qué lo habría causado.
Nota: alias cd
informes "alias: cd: no encontrado" y which cd
devuelve / usr / bin / cd, que es un script que es idéntico a otro Mac que no tiene el problema.
~/.bash_logout
?Respuestas:
Parece que hay algo extraño como
cd
No está definido para comportarse como lo estás viendo. La evidencia sugiere que su definición está siendo anulada en alguna parte.Es posible que tu
cd
El comando tiene un alias en alguna parte. losalias
el comando sin argumentos mostrará una lista de comandos con alias en la mayoría de los shells. Una solución para un comando con alias es prefaciar el comando con una barra invertida (\cd
). Eso cita la primera letra del comando y anula cualquier procesamiento de alias por parte del shell.También es posible que sea una función de shell.
declare -f
Enumerar las funciones definidas, al menos enbash
, y puedes ver sicd
Se está definiendo como una función.Con suerte tu
which
El comando puede admitir formas abreviadas de realizar estas comprobaciones. Revisa esta página de manual en línea por cómo una implementación dewhich
puede utilizarse para verificar funciones y alias, luego ver si suwhich
Funciona de manera similar.fuente
\cd
pero no tuvo efecto. Nota:alias cd
informes "alias: cd: no encontrado" ywhich cd
devuelve / usr / bin / cd, que es un script que es idéntico a otro Mac que no tiene el problema.cd
debe estar integrado en su shell en la mayoría de los casos.declare -f cd
da como resultado un script que parece haber sido instalado por Ruby.rvm
para gestionar tus rubies. Creo que la implementación requiere la redefinición decd
. ¡Me alegra que lo hayas descubierto!