“ $ PATH” และ“ ~ / bin” คืออะไร ฉันจะมีสคริปต์ส่วนตัวได้อย่างไร


29

คือ$PATHอะไร

ฉันจะมีคำสั่ง / โปรแกรมที่พร้อมใช้งานสำหรับฉันเท่านั้นได้อย่างไร
ฉันเคยเห็นเส้นทางนี้ที่~/binกล่าวถึงก่อนหน้านี้ แต่มันใช้เพื่ออะไรและฉันจะใช้มันได้อย่างไร


ฉันค่อนข้างทดลองเพราะนี่เป็นคำถามที่พบบ่อยหรือเนื้อหาวิกิมากกว่า "คำถามจริง" มันได้รับแจ้งเพราะฉันพูดถึง ~ / bin ในคำตอบก่อนหน้า (ในแถบด้านข้างที่เชื่อมโยงไปทางขวา) และมีคนแสดงความคิดเห็นเกี่ยวกับวิธีเพิ่มลงใน PATH: ตอนนี้แทนที่จะแสดงความคิดเห็นสั้น ๆ เราสามารถลิงก์ไปยังบทความนี้เมื่อ ~ / bin กล่าวถึง

คำตอบ:


26

$ PATH เป็นตัวแปรสภาพแวดล้อมที่ใช้ในการค้นหาคำสั่ง ~ เป็นไดเรกทอรีบ้านของคุณดังนั้น ~ / bin จะเป็น / home / user / bin; มันเป็นไดเรกทอรีปกติ

เมื่อคุณรัน "ls" ในเชลล์ตัวอย่างเช่นคุณรันโปรแกรม / bin / ls ตำแหน่งที่แน่นอนอาจแตกต่างกันไปขึ้นอยู่กับการกำหนดค่าระบบของคุณ สิ่งนี้เกิดขึ้นเพราะ / bin อยู่ใน $ PATH ของคุณ

หากต้องการดูพา ธ และค้นหาตำแหน่งที่คำสั่งใดตั้งอยู่:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

ในการมีไดเรกทอรีถังส่วนตัวของคุณเองคุณจะต้องเพิ่มไปยังเส้นทาง ทำได้โดยการแก้ไข ~ / .profile (ไฟล์ที่ซ่อน) เพื่อรวมบรรทัดด้านล่าง หากมีการแสดงความคิดเห็นบรรทัดคุณจะต้องยกเลิกการแสดงความคิดเห็นพวกเขาเท่านั้น หากพวกเขามีอยู่แล้วคุณพร้อมแล้ว!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

ตอนนี้คุณต้องสร้างไดเรกทอรี ~ / bin ของคุณและเนื่องจาก. profile ทำงานในการเข้าสู่ระบบและเพิ่มเพียง ~ / bin หากมีอยู่ในเวลานั้นคุณต้องเข้าสู่ระบบอีกครั้งเพื่อดู PATH ที่ปรับปรุง

ลองทดสอบดูสิ:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
สิ่งหนึ่งที่ต้องระวังเมื่อใช้ซึ่งก็คือจะพบคำสั่งที่เป็นไบนารีในระบบแฟ้มเท่านั้นมันไม่ได้รายงานเชลล์ builtin, นามแฝงหรือฟังก์ชั่น บ่อยครั้งมีประโยชน์มากกว่าที่จะใช้typeเพื่อดูว่าเชลล์คำสั่งจริงแก้ไขได้อย่างไร เช่น: which echoและtype echoจะรายงานสิ่งต่าง ๆwhichส่งคืน '/ bin / echo' แต่ 'type' ส่งคืนว่าเป็นเชลล์ในตัวซึ่งเชลล์จะชอบมากกว่าไฟล์ใน '/ bin'
Steve Beattie

@Steve Beattie, +1 whichถูกแทนที่โดยดีกว่าtypeหรือcommandในเชลล์แบบโต้ตอบและมันไม่มีประโยชน์อย่างสมบูรณ์ในสคริปต์
geirha

สิ่งหนึ่งที่ควรทราบว่าฉันเพิ่งสังเกตุ - $HOMEตัวแปรใน$PATHบางเหตุผลไม่ทำงานนั่นคือต้องใช้~เครื่องหมายแทน
Hi-Angel

19

เกี่ยวกับ~/binและคำสั่ง / โปรแกรมที่มีให้เฉพาะกับผู้ใช้ของคุณ

Ubuntu รุ่นล่าสุดรวมถึง~/binไดเรกทอรีในของคุณ$PATHแต่ถ้า~/binมีอยู่ในไดเรกทอรี

หากไม่มีอยู่:

  1. ตรวจสอบให้แน่ใจว่าคุณ~/.profileมีส่วนประกอบต่อไปนี้ (ค่าเริ่มต้น~/.profileแล้ว):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. สร้าง~/binไดเรกทอรี:

    mkdir -p ~/bin
    
  3. รีบูตคอมพิวเตอร์ของคุณหรือบังคับให้ bash อ่านใหม่~/.profile:

    exec -l bash
    

ขอบคุณสำหรับexec -l bashเคล็ดลับ"รีบูตหรือ" อะไร-lธงทำอย่างไร man execฉันไม่ได้หาคำอธิบายใน
evanrmurphy

3
exec -lจะดำเนินการทุบตีเป็นเปลือกเข้าสู่ระบบ [ wiki.bash-hackers.org/commands/builtin/exec] ในระยะสั้นจะบังคับทุบตีอีกครั้งอ่านและ/etc/profile ~/.profileเพิ่งรันexec bashจะอ่าน~/.bashrcใหม่เท่านั้น
Danilo Piazzalunga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.