2 votos

No es un identificador válido al iniciar el terminal

Me aparece esta línea cada vez que abro mi terminal. Todo lo demás parece funcionar bien, pero me gustaría que esto se arreglara, ya que no creo que sea una buena señal.

Last login: Mon Feb 19 09:21:05 on ttys000
-bash: export: `Workbooks.app/Contents/SharedSupport/path-bin': not a 
valid identifier
Rachels-MacBook-Pro:~ rachelromine$

He comprobado mi bash_profile y esto es lo que parece

eval export PATH="/Users/rachelromine/.rbenv/shims:${PATH}"
export RBENV_SHELL=bash
source 
'/usr/local/Cellar/rbenv/1.0.0/libexec/../completions/rbenv.bash'
command rbenv rehash 2>/dev/null
rbenv() {
  local command
  command="$1"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  rehash|shell)
    eval "$(rbenv "sh-$command" "$@")";;
  *)
    command rbenv "$command" "$@";;
  esac
}

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH

test -e "${HOME}/.iterm2_shell_integration.bash" && source 
"${HOME}/.iterm2_shell_integration.bash"

Creo que debo haber instalado algo que cuando mal. Si tienes alguna idea de lo que he instalado que podría haber causado que sería extremadamente útil, pero sobre todo quiero corregir el problema de identificador válido que aparece cada vez que abro mi terminal.

1 votos

Parece que el problema de root es que algo está haciendo un export sin citar correctamente el valor que se exporta. Esto puede deberse a la primera línea -- el eval El prefijo es inútil y peligroso y debería ser eliminado. Si eso no lo arregla, probablemente esté en uno de los archivos que se source d en la tercera o última línea; puede añadir echo comandos (por ejemplo echo "about to source rbenv.bash" ) antes y después de estos para saber de dónde viene el error.

1 votos

Deberías publicar esto como respuesta. Quitando el prefijo eval se eliminó totalmente el mensaje de identificador no válido. ¡¡¡Gracias Gordon!!! ¿Tienes alguna idea de lo que podría haber añadido un prefijo eval allí? ¿O cómo podría averiguarlo?

1 votos

Klanomath tienes razón. Aquí está el final real "${HOME}/.iterm2_shell_integration.bash" Voy a corregir mi post original para la integridad

1voto

Nate Puntos 220

Solución (original en los comentarios): eliminar eval de la primera línea. El problema podría también han estado en cualquiera de los scripts que son source d (en la tercera y última línea), pero resultó no ser el caso.

Explicación: eval hace que el shell analice ese comando dos veces. Técnicamente, pasa por todos los pasos habituales cuando el shell analiza una línea de comandos -interpretando y eliminando las comillas y los caracteres de escape, expandiendo las variables, etc.- y luego pasa el resultado al eval como argumentos. La página web eval (que está integrado en bash, no es un ejecutable separado) vuelve a unir esos argumentos como si se tratara de un comando, y ejecuta todo el proceso de análisis de nuevo y ejecuta el resultado.

Esto es casi siempre una mala idea. El análisis de shell es complicado y desordenado, y hacer más de lo mismo sólo hace que haya más complicación y desorden. Desafortunadamente, la gente a veces lo usa como una especie de solución de "golpear con un martillo más grande", y funciona tan bien como uno espera que funcione golpear cosas con un martillo más grande.

En este caso concreto, creo que lo que ocurre es que antes de que se ejecute este script, PATH se establece algo así como "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Applications/Something Workbooks.app/Contents/SharedSupport/path-bin" (donde "Something" es una palabra diferente, pero no sé el nombre específico de la aplicación). El shell toma esto:

eval export PATH="/Users/rachelromine/.rbenv/shims:${PATH}"

Elimina las comillas y amplía ${PATH} pasa el resultado a eval que se ejecuta:

export PATH=/Users/rachelromine/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Applications/Something Workbooks.app/Contents/SharedSupport/path-bin

Como las comillas se eliminaron en la primera pasada de análisis, ese espacio en medio del nombre de la aplicación se trata como un separador entre argumentos (en lugar de como parte de un nombre de archivo), por lo que el export conjuntos de comandos PATH a "/Users/rachelromine/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Applications/Something", luego en una operación totalmente no relacionada intenta exportar una variable llamada "Workbooks.app/Contents/SharedSupport/path-bin"... que no es un nombre de variable válido ("identificador").

Ahora, en cuanto a lo que eval está haciendo allí en primer lugar: No lo sé. No veo cómo podría hacer algo bueno aquí (aunque si no fuera por el espacio, no habría hecho ningún daño). Supongo que estaba en unas instrucciones que seguiste (o un prototipo de .bash_profile) para instalar rbenv. Lo que estaba haciendo allí No tengo ni idea.

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