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
cdNo 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
cdEl comando tiene un alias en alguna parte. losaliasel 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 -fEnumerar las funciones definidas, al menos enbash, y puedes ver sicdSe está definiendo como una función.Con suerte tu
whichEl comando puede admitir formas abreviadas de realizar estas comprobaciones. Revisa esta página de manual en línea por cómo una implementación dewhichpuede utilizarse para verificar funciones y alias, luego ver si suwhichFunciona de manera similar.fuente
\cdpero no tuvo efecto. Nota:alias cdinformes "alias: cd: no encontrado" ywhich cddevuelve / usr / bin / cd, que es un script que es idéntico a otro Mac que no tiene el problema.cddebe estar integrado en su shell en la mayoría de los casos.declare -f cdda como resultado un script que parece haber sido instalado por Ruby.rvmpara gestionar tus rubies. Creo que la implementación requiere la redefinición decd. ¡Me alegra que lo hayas descubierto!