การสร้างลิงก์สัญลักษณ์ใน / bin ไม่ทำงาน


8

ฉันได้ลองวิธีที่แตกต่างกันสามวิธีในการสร้างลิงก์สัญลักษณ์ไปที่ Sublime Text บน Mac ของฉันและหลังจากรีสตาร์ทเทอร์มินัลในแต่ละครั้งมันก็ยังบอกฉันไม่พบคำสั่ง ฉันใช้ Mac กับ Yosemite (OSX Yosemite, 10.10) ฉันจะสร้างลิงค์สัญลักษณ์เพื่อเปิด Sublime ด้วยsubคำสั่งได้อย่างไร

หนึ่ง

ln -s 'Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl' /bin/sub

สอง

ln -s "Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" /bin/sub

สาม (ไม่มีคำพูด)

ln -s Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub

ลิงก์สร้างบางสิ่งใน / bin ชื่อย่อยหรือไม่ ลอง sudo
chris

1
หากคุณใช้เครื่องหมายคำพูดคุณไม่ต้องการแบ็กสแลช หากคุณไม่ได้ใช้เครื่องหมายคำพูดแบ็กสแลชจำเป็น คุณต้องใช้เครื่องหมายทับนำ/Applications/…ตามที่ระบุไว้ในคำตอบและคุณต้องมีสิทธิ์ใช้งานรูทเพื่อเขียน/bin(ดังนั้นsudo) คำถามที่เหลือคือไม่ว่าจะเพียงพอในการเรียกใช้ปฏิบัติการเช่นนั้น คุณแน่ใจหรือไม่ต้องการให้เชลล์สคริปต์ที่ไม่บางอย่างเช่นopen "/Applications/Sublime\ Text.app"แทนที่จะเป็นเนื้อหาของไฟล์ในนั้น/bin?
Jonathan Leffler

คำตอบ:


16

คุณไม่มีเครื่องหมาย '/' ในตอนต้นของแอพและsudoเป็น/binเจ้าของโดยrootคุณไม่สามารถเขียนลงในฐานะผู้ใช้ปกติได้ ตามที่คุณมีอยู่ในปัจจุบันมันจะทำงานเฉพาะถ้าไดเรกทอรีปัจจุบันของคุณคือรูทของระบบ สิ่งนี้ถือว่าแน่นอนว่าแอพ Sublime Text อยู่ในโฟลเดอร์ Applications หลักของคุณ

ลองสิ่งนี้ ...

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /bin/sub

หนึ่งภายหลัง: ถือว่าเป็นการปฏิบัติที่ไม่ถูกต้องในการเปลี่ยนแปลงเนื้อหา/binและ/usr/binเนื่องจากการอัปเกรด OS X ที่กำลังจะมาถึงอาจลบล้างเนื้อหาที่นั่น /usr/local/binเป็นสถานที่ปกติในการติดตั้งไบนารีที่ผู้ใช้จัดหามาดังนั้น

[[ -d /usr/local/bin ]] || sudo mkdir /usr/local/bin
sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/sub

อาจเป็นตัวเลือกที่ดีกว่า

หรือ (ตามที่คุณอาจไม่จำเป็นต้องเรียกใช้ Sublime Text จากภายในเชลล์สคริปต์) เพียงกำหนด bash alias

alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl

ซึ่งควรจะเพิ่มลงในไฟล์ bash startup ของคุณเพื่อให้ติด

echo "alias sub=/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" >> ~/.bashrc

3
คุณต้องใช้sudoและถ้าคุณจะอ้างชื่อพา ธ แล้วอย่าใช้แบ็กสแลชเพื่อหนีช่องว่าง!
user3439894

อย่าลืมเครื่องหมายคำพูดเดี่ยวรอบ ๆ พา ธ : alias subl = '/ Applications / Sublime \ Text.app/Contents/SharedSupport/bin/subl' นอกจากนี้ควรใส่เครื่องหมาย ~ / .bash_profile
drct

1

ไปงานเลี้ยงสาย ฉันพบปัญหาเดียวกันเมื่อตั้งค่า Mac และลองบางสิ่ง นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน

ln -sv "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

สำหรับข้อมูลเพิ่มเติมไปที่repo GitHubนี้


นอกเหนือจากข้อเท็จจริงที่ว่าคำสั่งของคุณจะล้มเหลวเนื่องจากคุณไม่ได้ใช้sudoและจำเป็นต้องใช้ในกรณีนี้สิ่งนี้แตกต่างกันไปอย่างไรแล้วมีการนำเสนออะไรบ้างในคำตอบของ mockman? จากนั้นข้อเท็จจริงที่ว่าเขาเลือกที่จะใช้subกับsublเพื่อที่จะพิมพ์ตัวละครน้อยลงหนึ่งครั้งเพื่อใช้มันมันไม่ได้มาจากสิ่งที่ฉันเห็น!
user3439894

@ user3439894 sudo ไม่ใช่ข้อกำหนด และคำสั่งข้างต้น/usr/local/binไม่ได้ใช้/usr/binเป็นคำสั่งข้างต้น /usr/local/binเป็นไดเรกทอรีแนะนำสำหรับแอปพลิเคชันผู้ใช้ในขณะที่ / usr / bin ใช้สำหรับโปรแกรมผู้ใช้ที่มีการจัดการการกระจาย ดังนั้นsubVS sublคือไม่เพียงการเปลี่ยนแปลงมันก็ขึ้นอยู่กับความชอบของผู้ใช้; สิ่งที่พวกเขาต้องการเขียน ฉันขอโทษถ้ามันทำให้เกิดความสับสน ..
LT

1. เรียกใช้คำสั่งของคุณตามที่ได้จากบัญชีผู้ดูแลระบบส่งคืนln: /usr/local/bin/subl: Permission denied2. ฉันขอแนะนำให้คุณตอบคำตอบของคำสั่ง mockman เพราะมันมี/usr/local/bin/อยู่ในsudo ln -sคำสั่งที่สองในคำตอบของเขา!
user3439894
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.