คำถามติดแท็ก path

PATH (ตัวพิมพ์ใหญ่ทั้งหมด) เป็นชื่อของตัวแปรสภาพแวดล้อมบนระบบปฏิบัติการ Unix-like, DOS, OS / 2 และ Microsoft Windows โดยระบุชุดของไดเรกทอรีที่ค้นหาโปรแกรมปฏิบัติการ

7
$ 0 จะรวมเส้นทางไปยังสคริปต์หรือไม่
ฉันต้องการ grep สคริปต์ปัจจุบันเพื่อให้ฉันสามารถพิมพ์ความช่วยเหลือและข้อมูลรุ่นจากส่วนความเห็นที่ด้านบน ฉันกำลังคิดถึงสิ่งนี้: grep '^#h ' -- "$0" | sed -e 's/#h //' แต่ฉันสงสัยว่าจะเกิดอะไรขึ้นถ้าสคริปต์นั้นอยู่ในไดเรกทอรีที่อยู่ใน PATH และถูกเรียกโดยไม่ระบุไดเรกทอรีอย่างชัดเจน ฉันค้นหาคำอธิบายของตัวแปรพิเศษและพบคำอธิบายต่อไปนี้ของ$0: ชื่อของเชลล์หรือโปรแกรมปัจจุบัน ชื่อไฟล์ของสคริปต์ปัจจุบัน ชื่อของสคริปต์เอง คำสั่งในขณะที่มันถูกเรียกใช้ สิ่งเหล่านี้ไม่ทำให้ชัดเจนว่าค่าของ$0จะรวมถึงไดเรกทอรีหรือไม่หากสคริปต์ถูกเรียกใช้โดยไม่มี อันสุดท้ายบ่งบอกถึงความจริงที่ว่ามันจะไม่เกิดขึ้น ทดสอบบนระบบของฉัน (Bash 4.1) ฉันสร้างไฟล์เรียกทำงานได้ใน / usr / local / bin ชื่อscriptnameด้วยหนึ่งบรรทัดecho $0และเรียกใช้จากตำแหน่งอื่น นี่คือผลลัพธ์ของฉัน: > cd /usr/local/bin/test > ../scriptname ../scriptname > cd /usr/local/bin > ./scriptname ./scriptname > …

1
POSIX รับประกันว่าสาธารณูปโภคมาตรฐานอยู่ใน PATH หรือไม่?
ในส่วน "คำสั่งการค้นหาและการดำเนินการ"ข้อมูลจำเพาะ POSIX บอกว่าPATHมีการค้นหาเมื่อค้นหายูทิลิตีที่จะดำเนินการ (มีข้อยกเว้นบางประการ) ข้อกำหนดระบุถึงที่ใดก็ตามที่PATHจะเริ่มต้นเป็นค่าที่รับประกันว่าจะพบสาธารณูปโภคทั้งหมดหรือไม่ หรือฉันต้องทำสิ่งต่อไปนี้เพื่อรับประกันว่าฉันจะไม่ได้รับข้อผิดพลาด "ไม่พบคำสั่ง" เมื่อพยายามเรียกใช้ยูทิลิตี้มาตรฐานหรือไม่ PATH=$(command -p sh -c 'printf %s "${PATH}"') (ดูข้อกำหนด POSIX ของcommandยูทิลิตี้ )
11 path  posix  standard 

4
การทำให้เสร็จสิ้นเส้นทาง Bash ทำงานกับ sudo อย่างไร
การทำให้แท็บเสร็จสมบูรณ์ไม่ทำงาน (อย่างน้อยใน Ubuntu และ AFAIK Arch) ด้วย sudo mount <whatever> แฟ้ม ISO /etc/fstabฉันพยายามที่จะติดตั้งไม่ได้อยู่ใน ถ้าฉันพิมพ์ mount <whatever> การทำงานให้เสร็จสมบูรณ์ (แต่แน่นอนว่าคำสั่งล้มเหลวเนื่องจากฉันไม่ใช่รูต) เห็นได้ชัดว่ามันเป็นsudoตัวแบ่งมัน การทำให้เสร็จสมบูรณ์ทำงานกับ sudo ได้อย่างไร มันเป็นเรื่องที่น่าแปลกใจด้วย sudo umount <whatever> งานเสร็จสมบูรณ์ มันประสบความสำเร็จได้อย่างไร? มันดูเป็น/etc/fstabอย่างไร การแก้ไข:ฉันแค่ใส่เชลล์สคริปต์ลงในการ/usr/local/binโทรนั้นsudo mount ...โดยมีการส่งผ่านอาร์กิวเมนต์ไป การดำเนินการให้เสร็จสมบูรณ์เมื่อเรียกสคริปต์นี้เนื่องจากไม่มีsudoในทาง

2
วิธีการใช้ ln -s เพื่อสร้างทางลัดบรรทัดคำสั่ง?
ฉันมีไฟล์ sh ที่ฉันต้องการที่จะสามารถเปิดได้จาก terminal ได้ตลอดเวลา ฉันต้องการพิมพ์ "studio" ใน terminal และเปิด android studio ฉันจำได้ว่าเคยใช้ln -sในการทำสิ่งนี้ แต่ฉันลืมและเสียเวลาไปกับการค้นหาเว็บแล้ว นอกจากนี้ลิงก์สัญลักษณ์ที่สร้างขึ้นเก็บไว้ในไดเรกทอรีใด? นี่คือไวยากรณ์จากความพยายามของฉันไม่พบคำสั่ง ricardo@debian:~$ ln -s /opt/android-studio/bin/studio.sh studio ricardo@debian:~$ studio bash: studio: command not found

2
อะไรคือความแตกต่างระหว่าง“ echo $ PATH” และ / etc / path?
เมื่อฉันสะท้อน $ PATH ฉันจะได้รับสิ่งนี้: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools. ฉันต้องการลบพา ธ บางส่วนออกจากสิ่งนี้ แต่เมื่อฉันเปิดไฟล์โดยใช้คำสั่งvim /etc/pathsฉันจะได้ผลลัพธ์ต่อไปนี้: /usr/local/bin /usr/bin /bin /usr/sbin /sbin ไฟล์ / etc / path แตกต่างจากตัวแปร $ PATH หรือไม่?
10 osx  path 

4
ทำไมโปรแกรมของฉันถูกเรียกว่า "set" ไม่ถูกเรียกใช้งาน?
ฉันได้สร้างโปรแกรม C อย่างง่ายเช่นนั้น: int main(int argc, char *argv[]) { if (argc != 5) { fputs("Not enough arguments!\n", stderr); exit(EXIT_FAILURE); } และฉันมีเส้นทางของฉันแก้ไขในetc / bash.bashrcเช่นนั้น PATH=.:$PATH ฉันได้บันทึกโปรแกรมนี้เป็น set.c และกำลังรวบรวมด้วย gcc -o set set.c ในโฟลเดอร์ ~/Programming/so อย่างไรก็ตามเมื่อฉันโทร set 2 3 ไม่มีอะไรเกิดขึ้น. ไม่มีข้อความที่ปรากฏ การเรียกร้อง ./set 2 3 ให้ผลลัพธ์ที่คาดหวัง ฉันไม่เคยมีปัญหากับ PATH มาก่อนและ which set ./setผลตอบแทน …

3
สถานที่ที่จะวางไบนารีเพื่อให้พวกเขาอยู่ในเส้นทางและสามารถพบได้ง่าย
ฉันกำลังสร้างไบนารีสคริปต์และอื่น ๆ ที่ฉันต้องการติดตั้งอย่างง่ายดาย (ใช้ rpms ของตัวเอง) เนื่องจากฉันต้องการให้ทุกคนสามารถเข้าถึงได้สัญชาตญาณของฉันจึงต้องใส่ไว้ใน / usr / bin; ไม่จำเป็นต้องเปลี่ยน PATH อย่างไรก็ตาม; executables ของฉันตอนนี้หายไปในกลุ่มของคนอื่น ๆ ทั้งหมด; ฉันจะค้นหาไฟล์ปฏิบัติการทั้งหมดที่ฉันใส่กลับมาได้อย่างง่ายดาย ฉันคิดว่า: ไดเรกทอรีย่อยใน / usr / bin (ฉันรู้ว่าฉันไม่สามารถทำได้เพียงแสดงความคิดของฉัน) ไดเรกทอรีอื่น (/ opt / me / bin) และเชื่อมโยงแต่ละไฟล์ที่เรียกใช้กับ / usr / bin (มีงานจำนวนมาก) ไดเรกทอรีอื่น (/ opt / me / bin) และเชื่อมโยงไดเรกทอรีไปยัง / usr / …

1
เส้นทางในการค้นหาหน้า 'man' เป็นอย่างไร
ฉันงงงวยกับวิธีที่ใช้ในการค้นหาmanหน้าเว็บ "สิ่งที่ถูกต้อง" ดูเหมือนจะเกิดขึ้นอย่างน่าอัศจรรย์ ตัวอย่างเช่นหากเปลี่ยน PATH จาก /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin:/usr/texbin ถึง /usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin:/usr/texbin เส้นทางค้นหาmanหน้า (ตามman --path) การเปลี่ยนแปลงจาก /usr/share/man:/usr/local/share/man:/opt/X11/share/man:/usr/local/git/share/man:/usr/texbin/man ถึง /usr/local/git/share/man:/usr/share/man:/usr/local/share/man:/opt/X11/share/man:/usr/texbin/man ยังไงก็ตามรุ่นของ Git ที่ฉัน "แทนที่" Git เริ่มต้นด้วยกำลังมีเอกสารของมันถูกต้องพบก่อนเอกสารใด ๆ สำหรับ Git ในตัว มันเกิดขึ้นได้อย่างไร?
10 path  man 

4
รายการไฟล์ / ไบนารีทั้งหมดใน PATH ปัจจุบัน
มีวิธี "ใช้ง่าย" ในการรันคำสั่งลักษณะ "ls -la" สำหรับการแสดงรายการไฟล์ทั้งหมด / ไบนารีที่ปฏิบัติการได้ใน PATH ปัจจุบันหรือไม่? (ฉันตั้งใจที่จะไพพ์เอาต์พุตเป็น grep สำหรับการค้นหาคำสั่งที่ไม่รู้จักคำนำหน้า แต่รู้จักกันโดยทั่วไปว่า "ชื่อ" ชนิดของกรณีเมื่อการเติมข้อมูลอัตโนมัติ / การแท็บในทุบตีนั้นไม่มีประโยชน์ คุณสมบัติที่สมบูรณ์ "... )
10 bash  ls  path  autocomplete 

2
เหตุใดจึงมีหลายโปรแกรมอยู่ใน PATH
อย่างน้อยสิ่งหนึ่งที่ไขปริศนาเกี่ยวกับเดสก์ท็อป Linux อย่างน้อยก็คือทุกอย่างอยู่ในเส้นทางของฉัน ทุกอย่างฉันหมายถึงทุกแอปพลิเคชันเดสก์ท็อปรวมถึงสิ่งต่าง ๆ เช่น gnome-character-map และ glchess สิ่งเหล่านี้ไม่มีอินเตอร์เฟสบรรทัดคำสั่งที่จะพูดถึงดังนั้นฉันไม่สามารถนึกถึงกรณีที่ฉันจะเปิดใช้งานสิ่งเหล่านี้เป็นประจำจากเทอร์มินัล - และในกรณีที่ไม่น่าเป็นไปได้นั้นฉันไม่สามารถจินตนาการได้ว่า เส้นทาง ดูเหมือนว่าจะเป็นเรื่องตลก แต่อาจมีเหตุผลที่ดี ดังนั้นจึงไม่เกิดขึ้น? มีผลกระทบที่สำคัญต่อประสิทธิภาพหรือการบำรุงรักษาหรือไม่?

2
การเพิ่มโฟลเดอร์ไฟล์ jar ลงในพา ธ ของฉัน
ฉันมีเครื่องมือจาวาที่ฉันต้องใช้ เครื่องมืออยู่ในโฟลเดอร์ที่เต็มไปด้วยไฟล์ jar ฉันต้องการเพิ่มโฟลเดอร์นี้ในเส้นทางของฉันด้วยเหตุผลที่ชัดเจน แต่หลังจากฉันแก้ไข. bash_profile ของฉันเพื่อรวมโฟลเดอร์ใหม่ในตัวแปร $ PATH และแหล่งที่มามันไม่ทำงาน ฉันลองออกจากระบบและลงชื่อเข้าใช้อีกครั้งและนั่นก็ไม่ได้ผลเช่นกัน ฉันเพิ่งได้รับข้อความข้อผิดพลาด "ไม่สามารถเข้าถึง jarfile .jar"
10 path  java 

5
ค้นหาพา ธ สัมบูรณ์จากสคริปต์
ในสคริปต์ฉันได้รับใน$0เส้นทางญาติที่เป็นไปได้ สำหรับการแปลงให้เป็นสัมบูรณ์ฉันได้พบโซลูชันนี้ซึ่งฉันไม่เข้าใจ: abspath=$(cd ${0%/*} && echo $PWD/${0##*/}) ปัญหาของฉันคือภายในมหัศจรรย์ของและ${0%/*} ${0##*/}ดูเหมือนว่าก่อนหน้านี้จะแยก dirname และหลังจะแยกชื่อไฟล์ฉันไม่เข้าใจเลย
10 bash  path 

1
ใช้ `/ etc / path` หรือ` / etc / path.d` เพื่อเพิ่มรายการใน PATH ใน macOS Sierra?
จากสิ่งที่ฉันได้รวบรวมในสถานที่ต่าง ๆ ด้วยการอภิปรายเกี่ยวกับ/usr/libexec/path_helperและทั้งหมดเห็นได้ชัดว่าวิธีการที่ทันสมัยในการเพิ่มรายการให้กับตัวแปรสภาพแวดล้อมPATHใน macOS Sierra 10.12 คือ: แก้ไข/etc/pathsไฟล์ เพิ่มไฟล์ที่จะอ่านจาก/etc/paths.dไดเรกทอรี คำถามของฉัน: kosher ใดที่ทันสมัยกว่าบน macOS รุ่นใหม่? หากวิธีที่ดีกว่าหรือมากกว่าทั่วไปคือการวางไฟล์ลงในpaths.dไดเรกทอรีชื่อและเนื้อหาของไฟล์เหล่านั้นคืออะไร? ตัวอย่างใด ๆ ? ฉันใช้มากกว่าzsh bashนั่นสร้างความแตกต่างหรือไม่? สองตัวเลือกเหล่านี้เป็นเอกลักษณ์ของ macOS หรือไม่ หรือพวกเขาจะปรากฏใน BSD หรือระบบที่คล้าย Unix อื่น ๆ ?
10 osx  zsh  path  etc 

1
zsh - ขยายพา ธ ไบนารีแบบเต็มบน <tab>
ในพฤติกรรม zsh ปัจจุบันของฉันกดปุ่มแท็บหลังจากพิมพ์ "sudo" เพียงแค่เพิ่มช่องว่าง $ sudo ... สิ่งที่ฉันต้องการคือให้แท็บขยายอย่างเต็มที่ไปยังเส้นทางของไบนารีที่จะดำเนินการเมื่อฉันกดแท็บทำให้ฉันเห็นสิ่งที่จะทำงาน: $ /usr/bin/sudo ... เป้าหมายคือเพื่อป้องกันกรณีที่ผู้ใช้ในเครื่องของฉันถูกแฮกรายการที่เพิ่มลงใน$PATHตัวแปรของฉันและ 'sudo' เรียกใช้โปรแกรมที่เป็นอันตราย
10 zsh  path  autocomplete 

1
เป็นไปได้หรือไม่ที่จะเพิ่มความสามารถในการเรียกใช้งานได้ครั้งเดียวแทนที่จะเพิ่มทั้งไดเรกทอรีไปยัง $ PATH ของฉัน
ฉันมี XAMPP ติดตั้งใน OSX และโดยค่าเริ่มต้นจะเป็นการเพิ่มเส้นทางไปยังbinไดเรกทอรีของตัวเอง(เต็มไปด้วยยูทิลิตี้ต่าง ๆ ) ไปยัง$PATHตัวแปรของฉัน: # Add path to XAMPP PHP version export XAMPP_PHP=/Applications/XAMPP/xamppfiles/bin export PATH="$XAMPP_PHP:$PATH" แต่โชคไม่ดีที่หนึ่งของสาธารณูปโภคของมันจะถูกเรียกว่าHEADซึ่งต้องขอบคุณ OSX ของระบบแฟ้มกรณีตายชนกับยูนิกซ์headคำสั่ง XAMPP HEADไม่มีความเกี่ยวข้องอย่างสมบูรณ์กับhead(ฉันคิดว่ามันออกคำขอ HTTP HEAD) แน่นอนฉันต้องการใช้ทั้งสองheadและ XAMPP ดังนั้นฉันเพียงแค่เปลี่ยนลำดับตัวแปรเส้นทาง: export PATH="$PATH:$XAMPP_PHP" สิ่งนี้ทำให้ฉันใช้headแต่ตอนนี้มีการชนกันระหว่าง PHP เวอร์ชัน XAMPP (เช่น 5.5) และเวอร์ชัน PHP ที่ติดตั้งไว้ล่วงหน้าซึ่งมาพร้อมกับ OSX (5.3) เนื่องจากเส้นทางที่ 5.3 มาก่อนมันจะมีความสำคัญกว่า แผนของฉันสำหรับโซลูชันแฮ็คแฮ็กคือการเพิ่มพา ธ ไฟล์แบบเต็ม + ชื่อแค่เวอร์ชัน …
9 path 

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