PATH มีจุดประสงค์อะไร?
มันเป็นวิธีที่เชลล์ของคุณค้นหาโปรแกรม เมื่อคุณพิมพ์lsตัวอย่างเช่นที่กำลังเรียกใช้โปรแกรมที่เรียกว่าlsซึ่งอาศัยอยู่ใน/binในระบบส่วนใหญ่รวมถึง Mac OS X ได้เปลือกของคุณสามารถหาว่าเป็นเพราะอยู่ใน/binPATH
เชลล์ค้นหาโปรแกรมPATHตามลำดับจากซ้ายไปขวา หากมีสองlsโปรแกรมในระบบของคุณและไดเรกทอรีของพวกเขาทั้งในของคุณก็จะได้พบกับหนึ่งในไดเรกทอรีที่ระบุไว้เป็นครั้งแรกในของคุณPATHPATH
อะไรคือความแตกต่างระหว่าง / etc / path และ ~ / .bash_profile
พา ธ ที่ตั้งค่า/etc/pathsจะถูกเพิ่มไปยังPATHเมื่อเริ่มต้นในทุกเชลล์บน Mac OS X
~/.bash_profileเป็นเพียงหนึ่งในสคริปต์เชลล์หลายตัวที่รันโดย Bash เมื่อเริ่มต้นและหลาย ๆ ตัวเป็น Bash-specific ดังนั้นหากคุณเปลี่ยนเชลล์ - Mac OS X จะมีการจัดส่งtcshและzshตัวอย่างเช่น - การเปลี่ยนแปลงที่ทำขึ้นเพื่อ/etc/bashrcไม่ให้ใช้กับเชลล์ใหม่ของคุณ
นอกจากนี้ยัง/etc/pathsเป็นไฟล์การกำหนดค่าระดับระบบในขณะที่~/.bash_profileต่อผู้ใช้ หากคุณมีผู้ใช้หลายแบบโต้ตอบการตั้งค่าบน Mac ของคุณ, คุณจะไม่ต้องการที่จะเพิ่มไดเรกทอรีที่คุณไม่ต้องการให้ปรากฏในของทุกคน/etc/paths PATHเช่นเดียวกับที่เป็นจริง/etc/bashrcยกเว้นว่าจะใช้กับผู้ใช้ที่ใช้ Bash เป็นเชลล์เท่านั้น
PATH แตกต่างจาก $ PATH และ $ {PATH} ต่างกันอย่างไร
โดยปกติคุณจะเห็นตัวแปรที่ไม่มีเครื่องหมายเมื่อคุณตั้งค่าตัวแปร FOO=barกำหนดตัวแปรสภาพแวดล้อมสตริงFOO barหากคุณพิมพ์setเชลล์จะแสดงตัวแปรสภาพแวดล้อมทั้งหมดให้คุณเห็นและในกรณีนั้นคุณจะเห็นตัวแปรโดยไม่มีเครื่องหมายใด ๆ
$PATHและ${PATH}มักจะใช้แทนกันได้ พวกเขาบอกเชลล์เพื่อขยายPATHค่าของตัวแปรปัจจุบันในสถานที่ ความแตกต่างเกี่ยวกับวิธีการและตำแหน่งที่คุณใช้ ตัวอย่างเช่น:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
ในechoคำสั่งที่สองเชลล์ไม่พิมพ์อะไรเลยเพราะมันขอให้เชลล์พิมพ์ตัวแปรที่เรียกว่าFOOxซึ่งไม่มีอยู่จริง เชลล์ถือว่าตัวแปรที่ไม่มีอยู่เป็นค่าว่าง เนื่องจากตัวที่สามechoใช้ซินโครไนซ์ปีกกามันทำให้เชลล์เห็นว่าคุณกำลังร้องขอFOOตัวแปรและนั่นxเป็นเพียงอักขระอื่นที่คุณต้องการพิมพ์ทันทีหลังจากนั้น
มีอีกวิธีหนึ่งที่จะได้เอฟเฟกต์แบบเดียวกันโดยไม่ต้องใช้เครื่องมือจัดฟันแบบโค้งโดยวิธี:
$ echo "$FOO"x
barx
ตัวแปรสภาพแวดล้อมถูกขยายในเครื่องหมายคำพูดคู่และเครื่องหมายคำพูดแยกxจากการขยายตัวแปรเพื่อให้เชลล์ทำสิ่งที่ถูกต้อง
ฉันใช้FOOตัวแปรสภาพแวดล้อมที่นี่เพื่อความชัดเจน ทุกสิ่งที่ฉันเขียนด้านบนใช้เช่นเดียวกับPATHเพราะมันเป็นเพียงตัวแปรสภาพแวดล้อมอื่น ข้อความตัวอย่างจะยาวขึ้นมาก
เส้นทางการส่งออกหมายถึงอะไร เราจะส่งออกเมื่อใด
จากFOOตัวอย่างด้านบนหากคุณต้องเรียกใช้โปรแกรมอื่นมันจะไม่เห็นFOOตัวแปรเพราะมันจะไม่ถูกส่งออก มันอาศัยอยู่ภายในอินสแตนซ์ของเชลล์หนึ่งตัวเท่านั้น:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
เมื่อฉันรันbashเชลล์ใหม่ภายใต้อันที่ฉันใช้อยู่แล้วจากนั้นลองแสดงค่าของFOOมันฉันจะว่างเปล่าเพราะFOOไม่ได้ถูกส่งออกเพื่อดูโปรแกรมย่อย จากนั้นผมก็เดินออกมาจากที่สองbashเช่นการส่งออกมันวิ่งอีกครั้งและตอนนี้อินสแตนซ์ที่สองเห็นคุณค่าของbashFOO
คุณใช้exportเมื่อคุณต้องการให้โปรแกรมย่อยเห็นค่าที่ตั้งไว้ในเชลล์และไม่ใช้เมื่อคุณไม่ต้องการให้เกิดขึ้น
โดยทั่วไปฉันไม่ส่งออกตัวแปรชั่วคราวในเชลล์สคริปต์เพราะฉันไม่ต้องการให้พวกเขาเปลี่ยนวิธีการทำงานของโปรแกรมจากเชลล์สคริปต์นั้น
ฉันจะไม่ตอบคำถามอื่นของคุณ คุณควรถามคำถามทีละครั้งเท่านั้น ฉันตอบแค่นี้เพราะพวกเขาเกี่ยวข้องกันอย่างคลุมเครือ ทุกอย่างอื่นอยู่ในคำถามที่แยกต่างหาก