.bashrc: kesalahan sintaks dekat token yang tidak diharapkan '('

Aug 15 2020

Saya menggunakan Subsistem Windows Untuk Linux. Saat meluncurkan Ubuntu, saya mendapatkan kesalahan ini:

-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'

Token '(' hanya muncul sekali di baris

: / mnt / c / Program Files (x86) / Common Files / Oracle / Java / javapath:

. Saya tidak mengerti mengapa kesalahan ini terjadi. Apa yang dapat saya lakukan untuk menghapus ini? Jika saya membiarkannya apa adanya, bagaimana pengaruhnya terhadap variabel jalur masing-masing?

Jawaban

11 ilkkachu Aug 15 2020 at 19:03

Berkenaan dengan sintaks shell, (adalah karakter khusus (seperti ;, >, &dll), tidak dapat muncul sebagai bagian dari nilai yang diberikan tanpa melarikan diri atau dikutip. Ini digunakan misalnya untuk memulai subkulit, tetapi seperti yang Anda perhatikan, dalam banyak kasus ini hanya menyebabkan kesalahan sintaks. (Tidak seperti, katakanlah &, yang hanya akan mengakhiri perintah secara diam-diam.)

Namun, tanda kurung bukan satu-satunya masalah Anda, Anda juga memiliki spasi kosong di jalurnya. Itu bukan kesalahan sintaks, tetapi mengubah arti perintah. export PATH=/mnt/c/Program Files/Somepathsarana untuk menetapkan /mnt/c/Programke PATH, dan untuk mengekspor variabel yang disebut Files/Somepath, yang juga menyebabkan kesalahan karena garis miring tersebut tidak berlaku dalam nama variabel.

Anda harus melepaskan semua tanda kurung dan spasi, seperti dalam Program\ Files\ \(x86\), atau cukup mengutip seluruh string:

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

atau hanya sebagian saja, meskipun itu mungkin lebih sulit untuk dibaca:

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

(Perhatikan bahwa Anda tidak dapat melakukan keduanya di dalam satu sama lain, PATH='/mnt/c/Program\ Files\ \(x86\)/...'akan menetapkan string yang berisi garis miring terbalik literal.)

3 Krackout Aug 15 2020 at 18:42

Tambahkan karakter escape \sebelum setiap tanda kurung:

Program Files \(x86\)/