.bashrc: kesalahan sintaks dekat token yang tidak diharapkan '('
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
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/Somepath
sarana untuk menetapkan /mnt/c/Program
ke 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.)
Tambahkan karakter escape \
sebelum setiap tanda kurung:
Program Files \(x86\)/