ไม่สามารถสร้างนามแฝงถาวรใน Mac OS


0

ใน Linux ฉันสามารถเพิ่ม alias ไปยัง bashrc และมันจะกลายเป็น alias แบบถาวร ใน Mac OS ฉันพยายามทำสิ่งเดียวกัน:

เป็นกลุ่ม ~ / .bashrc

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

ที่ถูกกล่าวว่าฉันได้รับนี้:

$ alias
alias rvm-restart='rvm_reload_flag=1 source '\''/Users/alex/.rvm/scripts/rvm'\'''

ดังนั้นprjนามแฝงของฉันอยู่ที่ไหน ฉันรีบูตแล็ปท็อป แต่ไม่มีอะไรเปลี่ยนแปลง

$ cat ~/.profile

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
test -f ~/.bashrc && source ~/.bashrc

$ cat ~/.bashrc
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

คำตอบ:


2

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

เพื่อแก้ปัญหานี้ฉันมักจะสร้างสคริปต์เริ่มต้นเชลล์ชื่อ~/.profile(หากยังไม่มีอยู่) และฉันเพิ่มคำสั่งต่อไปนี้ลงในไฟล์ดังกล่าวเพื่อตรวจสอบว่ามี~/.bashrcไฟล์อยู่หรือไม่และอ่านจากแหล่งที่มาดำเนินการภายในกระบวนการเชลล์ปัจจุบันไม่ใช่ subshell) หากมีอยู่:

test -f ~/.bashrc && source ~/.bashrc

การสร้างใหม่ตามที่ร้องขอ: แอป Terminal ของ Mac OS X จะเรียกใช้เชลล์ของคุณ ( bash) ในโหมด "เข้าสู่ระบบ" เมื่อมีการเรียกใช้ในโหมดเข้าสู่ระบบก็ไม่ได้อ่านbash / ดำเนินการ ~/.bashrcแต่จะอ่านและดำเนินการ~/.profileแทน หากคุณต้องการใส่สิ่งต่าง ๆ ลงในนั้น~/.bashrcและให้พวกเขาอ่านและดำเนินการในหน้าต่าง Terminal ใหม่ทุกครั้งคุณจะต้องสร้างเชลล์สคริปต์ไฟล์ชื่อ~/.profileและให้ไฟล์นั้นมีคำสั่งที่ค้นหา~/.bashrcและอ่านและดำเนินการ

ในกรณีที่คำกริยา "source" โยนคุณออก: "sourcing" ไฟล์สคริปต์เชลล์คือเมื่อเชลล์ (เช่นbash) อ่านคำสั่งเชลล์จากไฟล์และเรียกใช้คำสั่งเหล่านั้นในกระบวนการเชลล์ปัจจุบันจึงส่งผลกระทบต่อสภาพแวดล้อมของปัจจุบัน กระบวนการเปลือก โดยปกติเชลล์สคริปต์ไฟล์อื่น ๆ ที่คุณเขียนไม่ได้มา ; แต่จะถูกดำเนินการใน sub-shell (อินสแตนซ์แยกต่างหากหรือสำเนาbash) และพวกเขาไม่สามารถเปลี่ยนแปลงสิ่งใดในสภาพแวดล้อมของ parent parent (อินสแตนซ์หลักของbashที่เริ่มต้นเมื่อคุณเปิดหน้าต่าง Terminal ใหม่)

ในการรับเชลล์ไปยังซอร์สสคริปต์คุณใช้sourceคำสั่งซึ่งสร้างไว้ในเชลล์ ช็อตคัตสำหรับsourceคำสั่งคือ.(ใช่เพียงแค่ตัวอักษรจุด / ระยะเวลา / ตัวอักษรเต็มหยุด) ในเวอร์ชันก่อนหน้าของคำตอบนี้ฉันใช้.โอเปอเรเตอร์แทนsourceคำสั่ง


ฉันไม่เข้าใจคุณช่วยพูดอีกทีได้ไหม
アレックス

แต่มันก็ใช้งานได้ดี แต่เมื่อฉันเรียกใช้คำสั่งนี้ เมื่อฉันเปิดเปลือกอื่น "prj" ไม่ทำงานอีกต่อไป
アレックス

@Alex โอเคลองตอนนี้
Spiff

ขอบคุณ แต่สิ่งที่... runs your shell (bash) in "login" modeและสิ่งที่เป็นโหมดอื่น ๆ ที่มีอยู่และความแตกต่างระหว่างพวกเขา?
アレックス

@Alex นั่นเป็นหัวข้อที่สมควรได้รับคำถามของตัวเอง ในความเป็นจริงมันถูกถามและตอบแล้วที่นี่ใน SuperUser: superuser.com/questions/657848/…
Spiff

0

คุณเปิดหน้าต่างเทอร์มินัลใหม่หรือเรียกใช้source ~/.bashrcหลังจากแก้ไขหรือไม่ เทอร์มินัลปัจจุบันจำเป็นต้องได้รับการอัพเดตสำหรับเส้นทาง / นามแฝง

$ vim ~/.bashrc
alias prj='cd ~'
:x
$ alias
$ alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''
$ source ~/.bashrc
$ alias
$ alias prj='cd ~'
  alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''

ฉันพูดว่า "แม้หลังจากรีบูตเครื่อง"
アレックス

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