Non è un identificatore valido all'avvio del terminale


2

Sto ottenendo questa linea ogni volta che apro il mio terminale. Tutto il resto sembra funzionare bene, ma mi piacerebbe ottenere questo fisso dal momento che non penso che sia un buon segno.

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$

Ho controllato il mio bash_profile e questo è quello che sembra

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"

Penso di aver installato qualcosa che, quando è storto. Se hai idea di cosa ho installato che potrebbe averlo causato sarebbe estremamente utile, ma soprattutto voglio correggere il problema di identificatore valido che appare ogni volta che apro il mio terminale.


1
Sembra che il problema principale sia che qualcosa sta facendo un export comando senza citare correttamente il valore da esportare. Questo potrebbe essere dovuto alla prima linea - il eval il prefisso è inutile e pericoloso e dovrebbe essere rimosso. Se ciò non risolve il problema, è probabilmente in uno dei file source d nella terza o ultima riga; Puoi aggiungere echo comandi (ad es. echo "about to source rbenv.bash" ) prima e amp; dopo quelli per scoprire da dove viene l'errore.
Gordon Davisson

1
Dovresti postare questa come risposta. la rimozione del prefisso eval elimina completamente il messaggio di identificazione non valido. Grazie Gordon !!! Hai qualche idea su cosa potrebbe aver aggiunto un prefisso eval in là? O come potrei scoprirlo?
Rachel Riley

1
klanomath hai ragione. Ecco la fine effettiva "$ {HOME} /. Iterm2_shell_integration.bash" Ho intenzione di correggere il mio post originale per completezza
Rachel Riley

Upps, mi dispiace, ignora il doppio rollback, per favore.
nohillside

??? Sono curioso di postare qui, puoi spiegare il doppio rollback? Ho fatto qualcosa di male? Grazie
Rachel Riley

Risposte:


1

Soluzione (originale nei commenti): rimuovere eval dalla prima riga. Il problema poteva sono stato anche in uno dei copioni che sono source d (nella terza e ultima riga), ma ciò non si è verificato.

Spiegazione: eval fa in modo che la shell analizzi il comando due volte. Tecnicamente, passa attraverso tutti i soliti passaggi quando la shell analizza una riga di comando - interpretando e rimuovendo virgolette e caratteri di escape, variabili di espansione, ecc. - quindi passa il risultato alla eval comando come argomenti. Il eval comando (che è incorporato in bash, non un eseguibile separato) rimette insieme questi argomenti come se fosse un comando, scorre tutto ciò che analizza ancora e esegue il risultato.

Questa è quasi sempre una cattiva idea. L'analisi delle shell è complicata e disordinata, e fare di più rende solo più complicazioni e confusione. Sfortunatamente, a volte le persone lo usano come una sorta di soluzione "colpisci con un martello più grande", e funziona così bene come ci si aspetterebbe di battere le cose con un martello più grande per funzionare.

In questo caso particolare, penso che quello che sta succedendo è che prima che questo script venga eseguito, PATH è impostato su qualcosa di simile a "/ usr / local / bin: / usr / bin: / bin: / usr / sbin: / Applications / Something Workbooks.app/Contents/SharedSupport/path-bin" (dove "Something" è diverso parola, ma non conosco il nome specifico dell'app). La shell prende questo:

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

Rimuove le virgolette e si espande ${PATH}, passa il risultato a eval, che esegue:

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

Poiché le virgolette sono state rimosse nel primo passaggio di analisi, quello spazio nel mezzo del nome dell'app viene trattato come un separatore tra gli argomenti (anziché come parte di un nome file), quindi il export set di comandi PATH a "/Users/rachelromine/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/Applications/Something", quindi in un'operazione totalmente non correlata tenta di esportare una variabile denominata "Workbooks.app/Contents/SharedSupport/path-bin" ... che non è un nome di variabile valido ("identificatore").

Ora, per quanto riguarda quello eval sta facendo lì in primo luogo: non lo so. Non riesco a vedere come potrebbe fare qualcosa di buono qui (anche se se non fosse per lo spazio, non avrebbe fatto alcun danno). Presumo che fosse in alcune istruzioni che hai seguito (o un prototipo .bash_profile) per l'installazione di rbenv. Cosa stava facendo , Non ne ho idea.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.