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

5
ทำไมไม่ใช้“ อันไหน”? จะใช้อะไรดี?
เมื่อมองหาเส้นทางไปปฏิบัติการหรือตรวจสอบสิ่งที่จะเกิดขึ้นถ้าคุณใส่ชื่อคำสั่งในเปลือก Unix มีมากมายเหลือเฟือของสาธารณูปโภคที่แตกต่างกัน ( which, type, command, whence, where, whereis, whatis, hashฯลฯ ) เรามักได้ยินว่าwhichควรหลีกเลี่ยง ทำไม? เราควรใช้อะไรแทน

7
วิธีการใช้ `ซึ่ง` กับคำสั่ง aliased?
เช่นเดียวกับผู้ใช้ส่วนใหญ่ฉันมีการตั้งค่านามแฝงมากมายเพื่อให้ชุดธงเริ่มต้นสำหรับโปรแกรมที่ใช้บ่อย ตัวอย่างเช่น alias vim='vim -X' alias grep='grep -E' alias ls='ls -G' ปัญหาคือถ้าฉันต้องการใช้whichเพื่อดูว่าvim/ grep/ ls/ / etc ของฉันมาจากไหนนามแฝงที่ได้รับในทาง: $ which vim vim: aliased to vim -X นี่เป็นผลลัพธ์ที่มีประโยชน์ แต่ไม่ใช่สิ่งที่ฉันกำลังมองหาในกรณีนี้ ฉันรู้ว่าvimเป็นนามแฝงvim -Xแต่ฉันต้องการที่จะรู้ว่า vimมาจากไหน ขาดการกำหนดนามแฝงชั่วคราวเพียงเพื่อให้ฉันสามารถใช้whichกับมันได้หรือไม่มีวิธีง่าย ๆ ที่จะwhich'แกะ' นามแฝงและเรียกใช้ตัวมันเองหรือไม่? แก้ไข:ดูเหมือนว่าwhichเป็นตัวเชลล์ที่มีพฤติกรรมที่แตกต่างกันในแต่ละเชลล์ ใน Bash คำแนะนำของ SiegeX เกี่ยวกับการ--skip-aliasทำงานของธง; อย่างไรก็ตามฉันอยู่ใน Zsh มีสิ่งที่คล้ายกันอยู่ที่นั่นไหม?
76 shell  zsh  alias  which 

1
Bash จะจำเส้นทางที่ผิดไปยังโปรแกรมที่ถูกย้าย / ลบ
เมื่อฉันทำ which pip3 ฉันเข้าใจ /usr/local/bin/pip3 แต่เมื่อฉันพยายามที่จะดำเนินการpip3ฉันได้รับข้อผิดพลาดดังต่อไปนี้: bash: /usr/bin/pip3: No such file or directory นี่เป็นเพราะฉันเพิ่งลบไฟล์นั้น ตอนนี้whichจุดที่คำสั่งรุ่นของผู้อื่นpip3ที่อยู่ใน/usr/local/binแต่เปลือกยังคงจำเส้นทางที่ผิด ฉันจะทำให้มันลืมเส้นทางนั้นได้อย่างไร whichคู่มือบอกว่า which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in a strictly POSIX-conformant shell. It does this by …
29 bash  path  which 

3
คำสั่ง `ซึ่ง` อาจจะผิด (บางครั้ง)?
ฉันได้รวบรวมเวอร์ชั่น emacs ล่าสุดจากซอร์สโค้ด (v24.2) เพราะเวอร์ชันที่ติดตั้งในเครื่องของฉันนั้นค่อนข้างเก่าสำหรับฉัน (v21.3) ฉันทำตามปกติ: $configure --prefix=$HOME make make install ตอนนี้ฉันกำลังทดสอบ emacs และรู้ว่ามันยังคงเปิดตัวรุ่นก่อนหน้า ... ในขณะที่$HOME/binเส้นทางของฉันควรจะแทนที่ระบบหนึ่ง (เนื่องจากมีการเติมไว้ที่ $ PATH ใน.bashrcไฟล์ของฉัน) ความคิดแรกของฉันคือการเห็นwhichผลลัพธ์ของคำสั่ง และน่าประหลาดใจมันทำให้เส้นทางไปสู่ ​​emacs ใหม่ ฉันไม่เข้าใจความแตกต่างของที่นี่ ในเซสชันเดียวกันนี่คือผลลัพธ์ที่ต่างกัน: $ emacs --version GNU Emacs 21.3.1 $ `which emacs` --version GNU Emacs 24.2.1 ฉันไม่มีนามแฝงที่เกี่ยวข้องกับ emacs เลย $ alias | grep emacs $ ความคิดใดที่เกิดขึ้นได้โปรด
17 bash  emacs  path  which 

1
ความแตกต่างระหว่างสิ่งที่และที่ไหน
ความแตกต่างระหว่างคำสั่งwhereและwhichคำสั่งเชลล์คืออะไร? นี่คือตัวอย่างบางส่วน ~ where cc /usr/bin/cc /usr/bin/cc ~ which cc /usr/bin/cc และ ~ which which which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/which ~ which where /usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin) ด้วย ~ where which which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde which: shell built-in command /usr/bin/which …

2
จะเพิ่มพา ธ โฮมไดเร็กตอรี่ที่ Unix ถูกค้นพบได้อย่างไร?
ฉันติดตั้งnode.jsในตำแหน่งที่กำหนดเองและเพิ่มตำแหน่งลง$PATHใน.profileไฟล์ $ node --version v0.6.2 $ which node $ echo $PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:~/Unix/homebrew/bin $ cat ~/.profile export PATH="$PATH:~/Unix/homebrew/bin" Node.js ทำงานได้ดี ปัญหามันไม่ได้อยู่ในรายการตามwhichคำสั่ง npmตอนนี้ฉันไม่สามารถติดตั้งได้ เพราะติดตั้งไม่สามารถหาสถานที่ตั้งของnpm node.jsฉันจะสร้างnodeไบนารีที่ค้นพบได้whichอย่างไร
12 path  profile  home  which 

1
วิธีที่ดีที่สุดในการตรวจจับ (จากสคริปต์) ว่าติดตั้งซอฟต์แวร์คืออะไร?
ฉันเคยผิดหวังมาก่อนด้วยความแตกต่างของเอาต์พุตจากwhichคำสั่งข้ามแพลตฟอร์มที่แตกต่างกัน (Linux กับ Solaris vx. OS X) ด้วยกระสุนที่แตกต่างกันอาจจะเล่นในเรื่องนี้เช่นกัน typeได้รับการแนะนำว่าเป็นทางเลือกที่ดีกว่า แต่มันจะเป็นแบบพกพาได้อย่างไร ในอดีตฉันได้เขียนฟังก์ชั่นซึ่งแยกวิเคราะห์ผลลัพธ์whichและจัดการกรณีการใช้งานที่แตกต่างกันที่ฉันพบ พวกเขาทำงานในเครื่องที่ฉันใช้และก็โอเคสำหรับสคริปต์ส่วนตัวของฉัน แต่ดูเหมือนว่าไม่น่าเชื่อถืออย่างยิ่งสำหรับซอฟต์แวร์ที่ฉันจะโพสต์ที่อื่นเพื่อให้ผู้อื่นใช้ ในการใช้ตัวอย่างที่เป็นไปได้เพียงอย่างเดียวสมมติว่าฉันต้องตรวจจับจากสคริปต์ว่า bash และ zsh มีอยู่ในเครื่องหรือไม่จากนั้นเรียกใช้คำสั่งด้วย zsh หากมีอยู่และทุบตีถ้า zsh ไม่ได้และ bash นั้นเพียงพอ เวอร์ชันที่ไม่มีข้อผิดพลาดเฉพาะ ส่วนที่เหลือของสคริปต์อาจเป็น Bourne shell หรือ Ruby หรืออย่างอื่น แต่สิ่งนี้สิ่งหนึ่งที่ต้องทำ (AFAIK) ด้วย zsh หรือ bash เวอร์ชันล่าสุด ฉันสามารถนับtypeได้ว่ามีอยู่ในแพลตฟอร์มหรือไม่ มีทางเลือกอื่นwhichที่สามารถตอบคำถามได้อย่างง่ายดายและต่อเนื่องว่ามีการติดตั้งซอฟต์แวร์บางส่วนหรือไม่? (ถ้าคุณต้องการให้ความคิดที่เกี่ยวข้องกับตัวอย่างที่ฉันให้มาโดยเฉพาะนั้นยอดเยี่ยม แต่ฉันแค่ถามถึงกรณีทั่วไป: วิธีที่น่าเชื่อถือที่สุดในการตรวจสอบว่ามีการติดตั้งสิ่งใดในเครื่องที่กำหนดหรือไม่ ?)
9 bash  zsh  standard  which 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.