.bashrc: erro de sintaxe próximo ao token inesperado '('

Aug 15 2020

Eu uso o subsistema do Windows para Linux. Ao iniciar o Ubuntu, recebo estes erros:

-bash: /home/divyansh/.bashrc: line 119: syntax error near unexpected token `('
-bash: /home/divyansh/.bashrc: line 119: `export PATH=/mnt/z/usr/local/bin:/mnt/z/usr/local/bin:/home/divyansh/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2020.424.0_x64__79rhkp1fndgsc:/mnt/c/Python38/Scripts:/mnt/c/Python38:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/MinGW/bin:/mnt/c/ProgramData/pbox:/mnt/c/Program Files/nodejs:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Users/asus/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/asus/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin:/mnt/c/tools:/mnt/c/Users/asus/AppData/Roaming/npm:/mnt/c/Users/asus/AppData/Local/atom/bin:/snap/bin'

O token '(' aparece apenas uma vez na linha

: / mnt / c / Arquivos de programas (x86) / Arquivos comuns / Oracle / Java / javapath:

. Não entendo por que esse erro é causado. O que posso fazer para limpar isso? Se eu deixar como está, como isso afetará as respectivas variáveis ​​de caminho?

Respostas

11 ilkkachu Aug 15 2020 at 19:03

No que diz respeito à sintaxe shell, (é um caractere especial (como ;, >, &etc.), não podem aparecer como parte de um valor atribuído sem ser escapado ou cotados. É usado, por exemplo, para iniciar subshells, mas como você notou, na maioria dos casos, apenas causa um erro de sintaxe. (Ao contrário, digamos &, do que simplesmente encerraria o comando silenciosamente.)

No entanto, os parênteses não são seu único problema, você também tem espaços em branco no caminho. Isso não é um erro de sintaxe, mas muda o significado do comando. export PATH=/mnt/c/Program Files/Somepathmeios para atribuir /mnt/c/Programa PATH, e para exportar uma variável chamada Files/Somepath, o que também faz com que um erro porque a barra não é válido em um nome de variável.

Você precisará escapar de todos os parênteses e espaços, como em Program\ Files\ \(x86\), ou simplesmente citar a string inteira:

PATH='/mnt/z/usr/local/bin:...:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:...'

ou apenas partes dele, embora possa ser mais difícil de ler:

PATH=/mnt/z/usr/local/bin:...:'/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath':...

(Observe que você não pode fazer os dois dentro do outro, PATH='/mnt/c/Program\ Files\ \(x86\)/...'atribuiria uma string contendo barras invertidas literais.)

3 Krackout Aug 15 2020 at 18:42

Adicione um caractere de escape \antes de cada parêntese:

Program Files \(x86\)/