วิธีแก้ไขข้อผิดพลาด“ ไม่ใช่ตัวระบุที่ถูกต้อง” หลังจากตั้งค่าตัวแปรสภาพแวดล้อม


12

ฉันพยายามติดตั้ง cocos2dx ใน Ubuntu 14.04 LTS แต่หลังจากตั้งค่าตัวแปรสภาพแวดล้อม (ใน.bashrc) ฉันเริ่มได้รับข้อผิดพลาดนี้:

bash: export: dev/cocos2d-x-3.2/tools/cocos2d-console/bin': not a valid identifier 
bash: export:/home/john/android': not a valid identifier 
bash: export: dev/android-ndk-r10b': not a valid identifier 
bash: export:dev/adt-bundle-linux-x86_64-20140702/sdk': not a valid identifier

และฉันไม่รู้จะแก้ไขอย่างไร


1
คุณจะต้องแสดงให้เห็นอย่างชัดเจนว่าคุณตั้งค่าตัวแปรอย่างไร
เกล็นแจ็คแมน

คำตอบ:


17

แต่หลังจากตั้งค่าตัวแปรสภาพแวดล้อม

ดูเหมือนว่าคุณจะทำไม่ถูกต้อง

ข้อผิดพลาดที่คุณได้รับหมายความว่ามีการใช้เส้นทาง (เช่น/home/john/android) เป็นชื่อของตัวแปรแทนที่จะเป็นค่าที่กำหนดให้

  • NAME=valueไวยากรณ์ที่ถูกต้องในการกำหนดตัวแปรคือ
  • ไวยากรณ์ที่ถูกต้องในการส่งออกตัวแปร (มีค่าใด ๆ ก็ตามถ้ามีจะได้รับมอบหมายแล้ว) export NAMEคือ
  • ไวยากรณ์ที่ถูกต้องในการกำหนดและการส่งออกตัวแปร (มีค่ามอบหมาย) export NAME=valueในเวลาเดียวกันคือ

ฉันสงสัยว่าคุณพยายามทำสิ่งที่สาม แต่ใช้ไวยากรณ์ผิด ข้อผิดพลาดทั่วไปห้าประการที่อาจทำให้เกิดข้อผิดพลาดเหมือนกับที่คุณเห็นคือ:

  1. =พื้นที่ใช้แทน export NAME valueไม่ถูกต้อง valueถูกตีความแล้วว่าเป็นชื่อของตัวแปรที่ตามมาเพื่อการส่งออก

    (สิ่งนี้เกิดขึ้นเพราะexport NAME1 NAME2 เป็นไวยากรณ์ที่ถูกต้องสำหรับการส่งออกตัวแปรหลายตัว)

  2. =วางพื้นที่รอบ ๆ ในภาษาการเขียนโปรแกรมหลายภาษาทั้งที่ถูกต้องและเหมาะสมกว่าสำหรับผู้ประกอบการแผ่นที่มีช่องว่างส่วนใหญ่ แต่เพื่อกำหนดค่าให้กับตัวแปรในเชลล์สคริปต์ (หรือสถานการณ์อื่น ๆ ที่คุณกำลังใช้คำสั่งเชลล์) สิ่งนี้ไม่ได้รับอนุญาต NAME = value(ในexportคำสั่งหรืออย่างอื่น) จะไม่ทำงาน NAME=valueคุณต้องใช้

    ( export NAME = valueพยายามที่จะส่งออกตัวแปรชื่อNAME, =และvalue. โชคดีที่เรื่องนี้ไม่เคยปรากฏขึ้นจะประสบความสำเร็จอย่างเงียบ ๆ เพราะความพยายามที่จะส่งออกตัวแปรที่เรียกว่า=เป็นข้อผิดพลาดทางไวยากรณ์. ในทางตรงกันข้ามexport NAME= valueจะปรากฏขึ้นเพื่อการทำงาน แต่ไม่ได้กำหนดvalueที่จะNAME--instead ก็มอบหมายให้ว่างเปล่า สตริงที่มีความยาวเป็นศูนย์NAMEและส่งออกและแยกการส่งออกตัวแปรvalueทั้งสองเป็นข้อผิดพลาดทั่วไป)

  3. การแยกส่วนของค่าของตัวแปรด้วยช่องว่าง ตัวแปรสภาพแวดล้อมสามารถมีช่องว่าง แต่ในทางปฏิบัติพวกเขามักไม่ค่อยใช้เป็นตัวคั่นฟิลด์ในตัวแปรสภาพแวดล้อม เมื่อตัวแปรเดียวมีหลายเส้นทางโดยเจตนาจะ:ใช้เพื่อแยกพวกเขา

  4. ไม่ต้องระบุช่องว่างเมื่อกำหนดให้กับตัวแปร บางครั้งค่าของตัวแปรสภาพแวดล้อมควรจะมีช่องว่าง ตัวอย่างเช่นอาจเป็นชื่อของไดเรกทอรีที่มีช่องว่าง ในกรณีนี้จำเป็นต้องอ้างอิงช่องว่างใด ๆ

    \วิธีหนึ่งที่จะทำเช่นนี้จะนำหน้าพวกเขาด้วย ดูฉันจะป้องกันวงเล็บที่ส่งผ่านไปยังคำสั่ง cd ได้อย่างไร และไม่สามารถลบไฟล์สำหรับข้อมูลเกี่ยวกับวิธีอื่น ๆ ได้ - วิธีการที่นำเสนอในคำตอบจะมีผลแม้ว่าจะไม่มีคำถามใดเกี่ยวกับการกำหนดให้กับตัวแปรสภาพแวดล้อมโดยเฉพาะ

    ตัวอย่างเช่นต่อไปนี้เป็นวิธีการส่งออกตัวแปรสภาพแวดล้อมSILLYPATHด้วยค่า/home/ek/silly name/bin:

    export SILLYPATH=/home/ek/silly\ name/bin
    export SILLYPATH='/home/ek/silly name/bin'
    export SILLYPATH="/home/ek/silly name/bin"

    บ่อยครั้งเมื่อโฟลเดอร์ที่คุณต้องใช้ในเชลล์หรือกำหนดให้กับตัวแปรสภาพแวดล้อมที่ใช้กันอย่างแพร่หลายมีช่องว่างมันอาจได้รับประโยชน์จากการเปลี่ยนชื่อ (แต่บางครั้งก็ใช้งานไม่ได้หรือไม่พึงประสงค์)

  5. การกำหนดและ / หรือการส่งออกตัวแปรเมื่อไม่ต้องทำอะไรเลย นี่เป็นข้อผิดพลาดของเมตา ปัญหาทางเทคนิคที่เฉพาะเจาะจงมักจะเป็นหนึ่งในข้างต้น แต่การแก้ปัญหาคือการกำจัดสายที่กระทำผิดหรือบางส่วนของมันมากกว่าที่จะแก้ไข อย่าซี้ซั้วเอารหัสจาก.bashrcของหลักสูตร แต่exportอาจมีการเพิ่มอาจตั้งใจหรืออาจมีรหัสมากกว่าตั้งใจ ตัวอย่างเช่นสมมติว่าคุณตั้งใจจะเขียน:

    echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc

    ที่จะผนวกเข้ากับ.bashrcแหล่งที่มานั้นอีกครั้ง แต่สมมติว่าคุณเขียนแทน:

    echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc  # WRONG!

    จากนั้นexportคำสั่งของคุณจะไม่เพียง แต่ส่งออกมูลค่าเพิ่มของPATHแต่จะพยายามส่งออกตัวแปรชื่อ.และซึ่งไม่ใช่สิ่งที่คุณต้องการ เนื่องจากมีอักขระที่ห้ามใช้ในชื่อตัวแปรดังนั้นคุณจะได้รับข้อผิดพลาดทุกครั้งที่คุณเริ่มเชลล์ bash แบบโต้ตอบใหม่/home/your-username/.bashrc

    เพื่อหลีกเลี่ยงปัญหานี้ผมขอแนะนำให้แก้ไข.bashrcในโปรแกรมแก้ไข (เช่น, nano ~/.bashrc, gedit ~/.bashrc) >>แทนที่จะเปลี่ยนเส้นทางออกไปยังจุดสิ้นสุดของมันด้วย

ฉันสงสัยว่านี่อาจเป็นข้อมูลที่เพียงพอสำหรับคุณในการค้นหาและแก้ไขข้อบกพร่องใน.bashrcไฟล์ของคุณ หากคุณต้องการความช่วยเหลือเพิ่มเติมแน่นอนคุณควรโพสต์เนื้อหาทั้งหมดของไฟล์นั้นเพื่อการวิเคราะห์ (บังเอิญว่าปัญหาของคุณเกิดขึ้นบ่อยครั้งพอสมควรและมีข้อผิดพลาดที่โปร่งใสเพียงพอที่จะทำให้คำตอบทั่วไปเช่นนี้เป็นไปได้)


2
ขอขอบคุณ! ช่างเป็นคำตอบอย่างละเอียด ในกรณีของฉันวางพื้นที่รอบ ๆ=เป็นปัญหา ฉันดิ้นรนกับสิ่งนี้มาระยะหนึ่งแล้ว
Rengas

5

ตรวจสอบให้แน่ใจว่าคุณกำลังทำงาน:

export ENV_VARIABLE

ค่อนข้างมากกว่า:

export $ENV_VARIABLE

มิฉะนั้นคุณกำลังพยายามส่งออกค่าของตัวแปรมากกว่าตัวตัวแปรดังนั้นคุณจะได้รับข้อผิดพลาดนี้


1

กำจัดช่องว่าง และเครื่องหมายดอลลาร์ เช่นนี้ใช้งานได้ในลักษณะเดียวกับที่คุณสามารถตั้งค่าโมดูลการตั้งค่า django บนเว็บเซิร์ฟเวอร์ผ่าน SSH เช่น:

export DJANGO_SETTINGS_MODULE=myapp.settings

0

ฉันเห็นสิ่งนี้เกิดขึ้นค่อนข้างบ่อยเมื่อคุณคัดลอกบางสิ่งด้วยเครื่องหมายจุลภาค (จากเว็บ) และอัปเดตสภาพแวดล้อมหรือไฟล์ bashrc ของคุณ

จุดเริ่มต้นที่ดีคือให้พิมพ์เครื่องหมายจุลภาคคว่ำในเนื้อหาที่วางด้วยตนเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.