Come posso impostare una variabile di ambiente specifica per l'utente che include un carattere di spazio?

0

Vorrei aggiungere una variabile d'ambiente per un account specifico in cui la variabile ha uno spazio. Sembra che la modifica di .bash_profile come di seguito non funzioni:

export ENV_VAR=“/Applications/Android Studio.app“

e nessuno dei due:

export ENV_VAR=“/Applications/Android\ Studio.app“

Mi devo accontentare della modifica del nome del pacchetto dell'applicazione, che non è preferibile.

    
posta andrewb 18.06.2014 - 05:32
fonte

1 risposta

1

export ENV_VAR="/Applications/Android Studio.app" dovrebbe impostare correttamente la variabile, ma è probabile che il programma / script che usa la variabile non lo citi correttamente. Se riesci a capire cosa sta usando la variabile, potrebbe essere possibile correggere lo script / programma.

La mia prima ipotesi sarebbe che la variabile d'ambiente sia usata da uno script di shell che fa qualcosa del tipo:

somecommand $ENV_VAR/subdir/filename

Il problema si verifica perché la shell espanderà la variabile, quindi eseguirà la divisione delle parole, ovvero dividerà /Applications/Android Studio.app/subdir/filename in due argomenti: /Applications/Android e Studio.app/subdir/filename . Si noti che incorporare gli escape o le virgolette nel valore della variabile non fa nulla di utile, perché la shell elabora le virgolette e fugge prima eseguendo sostituzioni di variabili. Pertanto, se hai utilizzato export ENV_VAR="/Applications/Android\ Studio.app" , sarebbe suddiviso in /Applications/Android\ e Studio.app/subdir/filename ; se hai utilizzato export ENV_VAR="'/Applications/Android Studio.app'" , verrà diviso in '/Applications/Android e Studio.app/subdir/filename' .

La soluzione è mettere virgolette attorno al riferimento di variabile, come questo:

somecommand "$ENV_VAR/subdir/filename"

che dice alla shell di non eseguire la divisione delle parole dopo la sostituzione, rimuovendo il problema.

Si noti che è anche possibile che sia qualcosa di diverso da uno script di shell, o uno script di shell che sta facendo qualcosa di più complicato come usare la variabile per costruire un'altra variabile, e possibilmente a seconda della divisione di parole quando viene usata quella variabile. La risoluzione di questo tipo di utilizzo può diventare complicata.

    
risposta data 18.06.2014 - 06:20
fonte

Leggi altre domande sui tag