ฉันสงสัยว่าคุณพยายามทำสิ่งที่สาม แต่ใช้ไวยากรณ์ผิด ข้อผิดพลาดทั่วไปห้าประการที่อาจทำให้เกิดข้อผิดพลาดเหมือนกับที่คุณเห็นคือ:
=
พื้นที่ใช้แทน export NAME value
ไม่ถูกต้อง value
ถูกตีความแล้วว่าเป็นชื่อของตัวแปรที่ตามมาเพื่อการส่งออก
(สิ่งนี้เกิดขึ้นเพราะexport NAME1 NAME2
เป็นไวยากรณ์ที่ถูกต้องสำหรับการส่งออกตัวแปรหลายตัว)
=
วางพื้นที่รอบ ๆ ในภาษาการเขียนโปรแกรมหลายภาษาทั้งที่ถูกต้องและเหมาะสมกว่าสำหรับผู้ประกอบการแผ่นที่มีช่องว่างส่วนใหญ่ แต่เพื่อกำหนดค่าให้กับตัวแปรในเชลล์สคริปต์ (หรือสถานการณ์อื่น ๆ ที่คุณกำลังใช้คำสั่งเชลล์) สิ่งนี้ไม่ได้รับอนุญาต NAME = value
(ในexport
คำสั่งหรืออย่างอื่น) จะไม่ทำงาน NAME=value
คุณต้องใช้
( export NAME = value
พยายามที่จะส่งออกตัวแปรชื่อNAME
, =
และvalue
. โชคดีที่เรื่องนี้ไม่เคยปรากฏขึ้นจะประสบความสำเร็จอย่างเงียบ ๆ เพราะความพยายามที่จะส่งออกตัวแปรที่เรียกว่า=
เป็นข้อผิดพลาดทางไวยากรณ์. ในทางตรงกันข้ามexport NAME= value
จะปรากฏขึ้นเพื่อการทำงาน แต่ไม่ได้กำหนดvalue
ที่จะNAME
--instead ก็มอบหมายให้ว่างเปล่า สตริงที่มีความยาวเป็นศูนย์NAME
และส่งออกและแยกการส่งออกตัวแปรvalue
ทั้งสองเป็นข้อผิดพลาดทั่วไป)
การแยกส่วนของค่าของตัวแปรด้วยช่องว่าง ตัวแปรสภาพแวดล้อมสามารถมีช่องว่าง แต่ในทางปฏิบัติพวกเขามักไม่ค่อยใช้เป็นตัวคั่นฟิลด์ในตัวแปรสภาพแวดล้อม เมื่อตัวแปรเดียวมีหลายเส้นทางโดยเจตนาจะ:
ใช้เพื่อแยกพวกเขา
ไม่ต้องระบุช่องว่างเมื่อกำหนดให้กับตัวแปร บางครั้งค่าของตัวแปรสภาพแวดล้อมควรจะมีช่องว่าง ตัวอย่างเช่นอาจเป็นชื่อของไดเรกทอรีที่มีช่องว่าง ในกรณีนี้จำเป็นต้องอ้างอิงช่องว่างใด ๆ
\
วิธีหนึ่งที่จะทำเช่นนี้จะนำหน้าพวกเขาด้วย ดูฉันจะป้องกันวงเล็บที่ส่งผ่านไปยังคำสั่ง 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"
บ่อยครั้งเมื่อโฟลเดอร์ที่คุณต้องใช้ในเชลล์หรือกำหนดให้กับตัวแปรสภาพแวดล้อมที่ใช้กันอย่างแพร่หลายมีช่องว่างมันอาจได้รับประโยชน์จากการเปลี่ยนชื่อ (แต่บางครั้งก็ใช้งานไม่ได้หรือไม่พึงประสงค์)
การกำหนดและ / หรือการส่งออกตัวแปรเมื่อไม่ต้องทำอะไรเลย นี่เป็นข้อผิดพลาดของเมตา ปัญหาทางเทคนิคที่เฉพาะเจาะจงมักจะเป็นหนึ่งในข้างต้น แต่การแก้ปัญหาคือการกำจัดสายที่กระทำผิดหรือบางส่วนของมันมากกว่าที่จะแก้ไข อย่าซี้ซั้วเอารหัสจาก.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
) >>
แทนที่จะเปลี่ยนเส้นทางออกไปยังจุดสิ้นสุดของมันด้วย