No es un identificador válido al iniciar el terminal

2

Estoy recibiendo esta línea cada vez que abro mi terminal. Todo lo demás parece estar funcionando bien, pero me gustaría arreglarlo 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 revisado mi perfil bash 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 está mal. Si tiene alguna idea de lo que instalé, eso podría haberlo provocado, pero sería extremadamente útil, pero principalmente quiero corregir el problema del identificador válido que aparece cada vez que abro mi terminal.

    
pregunta Rachel Riley 19.02.2018 - 19:54

1 respuesta

1

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

Explicación: eval hace que el shell analice ese comando dos veces. Técnicamente, sigue todos los pasos habituales cuando el shell analiza una línea de comandos (interpretar y eliminar comillas y caracteres de escape, expandir variables, etc.) y luego pasa el resultado al comando eval como argumentos. El comando eval (que está integrado en bash, no un ejecutable separado) vuelve a juntar esos argumentos como si fuera un comando, se ejecuta a través de todas las cosas de análisis otra vez 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 él solo crea más complicaciones y problemas. Desafortunadamente, la gente a veces lo usa como una especie de solución "golpéalo con un martillo más grande", y funciona tan bien como esperas que las cosas con un martillo más grande funcionen.

En este caso particular, creo que lo que está sucediendo es que antes de que se ejecute este script, PATH se configura en algo 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 expande ${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

Dado que 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 los argumentos (en lugar de como parte de un nombre de archivo), por lo que el comando export establece 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 puedo ver cómo podría hacer algún bien aquí (aunque si no fuera por el espacio, no habría hecho ningún daño). Supongo que estaba en algunas instrucciones que siguió (o en un prototipo .bash_profile) para instalar rbenv. Lo que estaba haciendo allí , no tengo idea.

    
respondido por el Gordon Davisson 21.02.2018 - 00:19

Lea otras preguntas en las etiquetas