ฉันจะทำให้โปรแกรมเรียกใช้งานได้จากทุกที่


75

ฉันควรทำอย่างไรถ้าฉันต้องการเรียกใช้โปรแกรมที่กำหนดโดยไม่คำนึงถึงไดเรกทอรีปัจจุบันของฉัน ฉันควรสร้างลิงค์สัญลักษณ์ไปที่โปรแกรมใน/binโฟลเดอร์หรือไม่?


5
ไม่คุณควรใช้ตัวแปร PATH ของเชลล์
msw

7
ฉันคิดว่าการสร้าง~/bin/โฟลเดอร์ส่วนตัวให้เพิ่มนั้นไปยังเส้นทางของคุณและสร้าง symlink ในโฟลเดอร์นั้นไปยังทุกสิ่งที่คุณต้องการให้เรียกใช้จากที่ใดก็ได้
frabjous

1
นอกจากนี้คุณยังสามารถตั้งค่านามแฝงที่มีเส้นทางแบบเต็มไปยังไบนารีที่คุณต้องการดำเนินการ
datasmurf

คำตอบ:


53

หากคุณเพียงพิมพ์export PATH=$PATH:</path/to/file>ที่บรรทัดคำสั่งมันจะคงอยู่ตามความยาวของเซสชันเท่านั้น

ถ้าคุณต้องการที่จะเปลี่ยนมันอย่างถาวรเพิ่มexport PATH=$PATH:</path/to/file>ไปยังไฟล์ ~ / .bashrc ของคุณ (เพียงแค่ในตอนท้ายเป็นเรื่องปกติ)


11
ขอบคุณมันใช้งานได้ สำหรับมือใหม่อย่างฉันอย่าลืมวงเล็บเหลี่ยม <> เช่นดังนั้น: $ PATH: / / ไฟล์ของคุณ / เส้นทาง
แซม

4
ยังไม่รวมชื่อไฟล์โปรแกรมเองในพา ธ
Olli Niemitalo

23

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

โปรแกรมนี้เป็นโปรแกรมที่ดาวน์โหลดซึ่งคุณได้รวบรวมจากแหล่งที่มาหรือไม่?

ค่อนข้างเป็นไปได้ว่าจะมีกลไกการติดตั้งอยู่แล้ว ในโฟลเดอร์ที่คุณคอมไพล์โปรแกรมในฐานะรูทให้รัน 'make install'

โปรแกรมนี้เป็นโปรแกรมที่ดาวน์โหลดที่คุณต้องการให้เป็นส่วนหนึ่งของโปรแกรมมาตรฐานในคอมพิวเตอร์หรือไม่

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

นี่เป็นโปรแกรมที่คุณเขียนขึ้นเองและ / หรือคุณไม่มีสิทธิ์พิเศษบนคอมพิวเตอร์

การสร้างโฟลเดอร์ในโฮมไดเร็กตอรี่ของคุณชื่อ 'bin' และวางโปรแกรมไว้ คุณอาจต้องแก้ไขสคริปต์เข้าสู่ระบบของคุณเพื่อเพิ่มเส้นทางแบบเต็มไปยังโฟลเดอร์นี้ (เช่น / usr / home / jeremy / bin)

ในขณะที่คุณสามารถเพิ่มไดเรกทอรีปัจจุบันลงในพา ธ การค้นหาคุณจะต้องทำสิ่งนี้กับโปรแกรมใหม่ทุกโปรแกรมและจะทำงานได้มากขึ้นในระยะยาว


15

การวางลิงค์ไปยังไฟล์ใน/binไดเรกทอรีไม่ใช่สิ่งที่ดีที่สุดที่ควรทำด้วยเหตุผลหลายประการ

  • หากไฟล์ปฏิบัติการจริงนั้นอยู่ในตำแหน่งที่ผู้ใช้บางคนไม่สามารถมองเห็นหรือดำเนินการพวกเขาเห็นว่ามันเป็นลิงค์ที่ไม่ดีหรือโปรแกรมที่ผิดปกติ
  • /binไดเรกทอรีควรจะสงวนไว้สำหรับโปรแกรมที่จำเป็นสำหรับการรันระบบ (สิ่งที่ชอบchmod, mkdirฯลฯ )

จริงๆคุณสามารถวาง (ติดตั้ง) แฟ้มที่ปฏิบัติการในหรือแม้กระทั่ง/usr/bin/ /usr/local/bin/แน่นอนคุณได้ติดตั้งโปรแกรมด้วยตนเอง ณ จุดนั้น การแจกจ่ายของคุณจะไม่ติดตามอย่างที่มันทำในส่วนที่เหลือของโปรแกรมของคุณ - คุณจะต้องอัปเกรดด้วยตนเองเมื่อจำเป็นและจะลบมันเองหากคุณต้องการ นอกจากนี้คุณจะต้องรู้ว่ามันขึ้นอยู่กับแพ็คเกจใด (ฟังดูเหมือนว่าคุณใช้โปรแกรมอยู่แล้วดังนั้นจึงได้รับการดูแล แต่โดยทั่วไปแล้ว ... )

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


6

หากคุณต้องการเรียกใช้คำสั่งfooในไดเรกทอรีเชลล์ของคุณอยู่ในขณะนี้โดยทั่วไปคุณมีสองตัวเลือก:

  1. พิมพ์./fooที่ shell prompt

  2. เพิ่ม.ไดเรกทอรี ( .เป็นชื่อสำหรับ "ไดเรกทอรีปัจจุบัน") ให้กับPATHตัวแปรสภาพแวดล้อม วิธีที่คุณทำสิ่งนี้ขึ้นอยู่กับเชลล์ที่คุณใช้:

    • สำหรับเชลล์ประเภท Bourne (bash, zsh, ksh ฯลฯ ) ที่คุณเขียน (ดูหน้านี้สำหรับข้อมูลเพิ่มเติม):

      export PATH=$PATH:.
      
    • สำหรับเชลล์ประเภท csh (tcsh, csh) ที่คุณเขียน (ดูหน้านี้สำหรับข้อมูลเพิ่มเติม):

      set path = ( $path .)
      

โปรดทราบว่า 2. เป็นความเสี่ยงด้านความปลอดภัยในระบบที่มีผู้ใช้หลายคน: ลองนึกภาพคุณcdไปยังไดเรกทอรี/tmpและผู้ใช้ที่เป็นอันตรายได้สร้างไบนารีมัลแวร์ชื่อlsในนั้น


2
ใช่ฉันคิดว่าตัวเลือกต่าง ๆ แสดงให้คุณเห็นว่ายูนิกซ์ช่วยให้คุณทำสิ่งต่าง ๆ ได้ซึ่งถือว่าเป็นการปฏิบัติที่ไม่ดี กำลังเพิ่ม เส้นทางของคุณยังสามารถสร้างผลข้างเคียงอื่น ๆ ที่ไม่ดีโดยทั่วไป
Unix Janitor

1

ล้อเล่นกับการPATHเปิดคุณถึงการใช้งานโปรแกรมที่เป็นอันตรายโดยไม่ได้ตั้งใจ มาตรฐานคือการติดตั้งสิ่งที่ "ท้องถิ่น" ภายใต้/usr/local(ดูFHSซึ่งประมวลผลการใช้งาน Unix: ลงวันที่เล็กน้อย แต่มันให้เหตุผล) /usr/local/binมักจะอยู่ในPATHสำหรับผู้ใช้ทั้งหมด

ของฉัน "ที่ติดตั้งภายใน" โปรแกรมอยู่ใน$HOME/binที่ตั้งอยู่ในเต้นมาตรฐาน./configure --prefix=$HOME ...ควบคู่กับไม่กี่ (ทุบตี) นามแฝงที่จะเลือกออกเช่นคอมไพล์สร้างขึ้นด้วยตนเองผ่านระบบหนึ่ง (คนที่ไม่ใช่การปะทะกันที่พบในPATHที่ส่วนท้ายสุด

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