2 votos

Ejecutar cd en una función bash llamada por un subshell provoca una salida extraña

Considera la función bash:

func() {
  cd /;
  echo test;
}

Llamarla hace lo que se espera:

~:>func
test
/:>

Pero cuando se llama desde un 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 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) donde func es complejo y requiere el uso de cd .

Lo que es extraño es que esto funcionaba bien antes. No empezó a ocurrir hasta hace poco, pero no sé qué lo habría provocado.

Nota: alias cd informa de que "alias: cd: no se encuentra" y which cd devuelve /usr/bin/cd que es un script idéntico a otro Mac que no tiene el problema.

2voto

Greg Tarsa Puntos 136

Parece que hay algo extraño como cd no está definida para que se comporte como tú la estás viendo. La evidencia sugiere que su definición está siendo anulada en alguna parte.

Es posible que su cd es un alias en alguna parte. El alias 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 preceder 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 se trate de una función de shell. declare -f debería enumerar las funciones definidas, al menos en bash y puedes ver si cd se define como una función.

Con suerte, su which puede admitir formas abreviadas de realizar estas comprobaciones. Compruebe esta página man en línea para ver cómo una implementación de which se puede utilizar para comprobar las funciones y los alias, y luego ver si su which funciona de manera similar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X