La ejecución de cd en una function bash llamada por subshell causa una salida extraña

Considera la function bash:

func() { cd /; echo test; } 

Llamarlo hace lo que esperas:

 ~:>func test /:> 

Pero cuando se lo llama desde una subshell (por ejemplo, usando backticks o $ ()) se comporta de forma 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 function:

 ~:>func() { echo test; } ~:>echo $(func) test ~:> 

Esto está causando problemas con algunos scripts que dependen de cierto comportamiento de salida, por ejemplo, CLASSPATH=$(func) donde func es complejo y requiere el uso de cd .

Lo 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 informa "alias: cd: no encontrado" y which cd devuelve / usr / bin / cd, que es una secuencia de commands que es idéntica a otra Mac que no tiene el problema.

Parece que sucede algo extraño ya que el cd no está definido para comportarse como lo está viendo. La evidencia sugiere que su definición está siendo anulada en alguna parte.

Es posible que su command de cd esté asociado a algún tipo de alias. El command alias sin arguments mostrará una list de commands con alias en la mayoría de los shells. Una solución para un command con alias es preceder al command con una barra invertida ( \cd ). Eso cita la primera letra del command y derrota cualquier procesamiento de alias por el shell.

También es posible que sea una function de shell. declare -f debe listr las funciones definidas, al less en bash , y puede ver si cd se está definiendo como una function.

Con suerte, tu command puede admitir forms abreviadas de hacer estos controles. Consulte esta página del manual en línea para ver cómo se puede usar una implementación para verificar las funciones y los alias, y luego ver si su which funciona de manera similar.