PATH มีจุดประสงค์อะไร?
มันเป็นวิธีที่เชลล์ของคุณค้นหาโปรแกรม เมื่อคุณพิมพ์ls
ตัวอย่างเช่นที่กำลังเรียกใช้โปรแกรมที่เรียกว่าls
ซึ่งอาศัยอยู่ใน/bin
ในระบบส่วนใหญ่รวมถึง Mac OS X ได้เปลือกของคุณสามารถหาว่าเป็นเพราะอยู่ใน/bin
PATH
เชลล์ค้นหาโปรแกรมPATH
ตามลำดับจากซ้ายไปขวา หากมีสองls
โปรแกรมในระบบของคุณและไดเรกทอรีของพวกเขาทั้งในของคุณก็จะได้พบกับหนึ่งในไดเรกทอรีที่ระบุไว้เป็นครั้งแรกในของคุณPATH
PATH
อะไรคือความแตกต่างระหว่าง / 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
เช่นการส่งออกมันวิ่งอีกครั้งและตอนนี้อินสแตนซ์ที่สองเห็นคุณค่าของbash
FOO
คุณใช้export
เมื่อคุณต้องการให้โปรแกรมย่อยเห็นค่าที่ตั้งไว้ในเชลล์และไม่ใช้เมื่อคุณไม่ต้องการให้เกิดขึ้น
โดยทั่วไปฉันไม่ส่งออกตัวแปรชั่วคราวในเชลล์สคริปต์เพราะฉันไม่ต้องการให้พวกเขาเปลี่ยนวิธีการทำงานของโปรแกรมจากเชลล์สคริปต์นั้น
ฉันจะไม่ตอบคำถามอื่นของคุณ คุณควรถามคำถามทีละครั้งเท่านั้น ฉันตอบแค่นี้เพราะพวกเขาเกี่ยวข้องกันอย่างคลุมเครือ ทุกอย่างอื่นอยู่ในคำถามที่แยกต่างหาก