ฉันพบ.bashrc
ไฟล์และต้องการทราบจุดประสงค์ / ฟังก์ชั่นของมัน มันใช้อย่างไรและเมื่อไหร่?
ฉันพบ.bashrc
ไฟล์และต้องการทราบจุดประสงค์ / ฟังก์ชั่นของมัน มันใช้อย่างไรและเมื่อไหร่?
คำตอบ:
.bashrc
เป็นเชลล์สคริปต์ที่ Bash ทำงานเมื่อใดก็ตามที่เริ่มทำงานแบบโต้ตอบ มันเริ่มต้นเซสชั่นเปลือกโต้ตอบ คุณสามารถใส่คำสั่งใด ๆ ในไฟล์ที่คุณสามารถพิมพ์ได้ที่พรอมต์คำสั่ง
คุณวางคำสั่งที่นี่เพื่อตั้งค่าเชลล์เพื่อใช้ในสภาพแวดล้อมเฉพาะของคุณหรือเพื่อปรับแต่งสิ่งต่าง ๆ ตามความต้องการของคุณ สิ่งที่ต้องใส่ร่วมกัน.bashrc
คือนามแฝงที่คุณต้องการให้มีอยู่เสมอ
.bashrc
ทำงานในทุก ๆการเปิดตัวเชลล์ ถ้าคุณพูด:
$ bash ; bash ; bash
จากนั้นกดCtrl-Dสามครั้ง.bashrc
จะทำงานสามครั้ง แต่ถ้าคุณพูดแบบนี้แทน:
$ bash -c exit ; bash -c exit ; bash -c exit
จากนั้น.bashrc
จะไม่ทำงานเลยเนื่องจาก-c
ทำให้การโทร Bash ไม่ใช่แบบโต้ตอบ เช่นเดียวกับเมื่อคุณเรียกใช้เชลล์สคริปต์จากไฟล์
ความคมชัด.bash_profile
และ.profile
สิ่งที่เรียกใช้เมื่อเริ่มต้นของเชลล์ล็อกอินใหม่ ( bash -l
) คุณเลือกว่าจะให้คำสั่งเป็นแบบ.bashrc
VS หรือไม่.bash_profile
ขึ้นอยู่กับว่าคุณต้องการให้มันรันครั้งเดียวหรือทุกครั้งที่เชลล์แบบโต้ตอบเริ่มทำงาน
ในฐานะตัวอย่างของนามแฝงที่ฉันต้องการใส่.bashrc
คุณต้องการทำการPATH
ปรับเปลี่ยน.bash_profile
แทนเนื่องจากโดยทั่วไปแล้วการเปลี่ยนแปลงเหล่านี้จะไม่ใช่idempotent :
export PATH="$PATH:/some/addition"
หากคุณใส่สิ่งนั้นลงไป.bashrc
แทนทุกครั้งที่คุณเปิดใช้เชลล์ย่อยแบบโต้ตอบ:/some/addition
จะถูกตรึงไว้ที่ส่วนท้ายของPATH
อีกครั้งสร้างงานพิเศษสำหรับเชลล์เมื่อคุณพิมพ์คำสั่ง
คุณจะได้รับเปลือกทุบตีโต้ตอบใหม่เมื่อใดก็ตามที่คุณเปลือกออกของvi
ด้วย:sh
ยกตัวอย่างเช่น
.bashrc
เมื่อเริ่มเป็นเชลล์การเข้าสู่ระบบ ซึ่งบางครั้งอาจจะนำไปสู่พฤติกรรมที่ไม่คาดคิด วิธีแก้ปัญหาตามปกติคือแหล่งที่มา.bashrc
จาก.profile
หรือ.bash_profile
แทน
.bashrc
ไม่ได้มีไว้สำหรับการใช้งานโดยเชลล์อื่น ๆ จึงไม่ควรที่จะหาแหล่งที่มาจากเชลล์.profile
(ซึ่งอาจใช้โดยbash
เชลล์อื่นที่ไม่ใช่เชลล์)
source ~/.bashrc
หรือ. ~/.bashrc
หรือ[[ -f ~/.bashrc ]] && source. ~/.bashrc
หรือ[ -f ~/.bashrc ] && source ~/.bashrc
ไม่ทำงาน?
.bashrc
มันมีที่มาแน่นอน (ใช้คำสั่งที่แนะนำจากsuperuser.com/a/183980/128768 ) ปัญหาที่ผมต้องเผชิญเป็นจริงไม่ได้จัดหาhttps://github.com/junegunn/fzf
ผ่านทางคำสั่งนี้ภายใน:.bashrc
source ~/.fzf.bash
ฉันเปิดอาคารผู้โดยสารแห่งใหม่แล้วCtrl
+ และฉันได้รับR
`__fzf_history__`bash: fzf: command not found
ฉันมาด้วยตนเอง.bashrc
และทางลัดคีย์เดียวกันจะเรียกใช้ fzf ตามที่คาดไว้ ขอโทษสำหรับเสียงที่นี่
วัตถุประสงค์ของ.bashrc
ไฟล์คือการให้สถานที่ที่คุณสามารถตั้งค่าตัวแปรฟังก์ชั่นและชื่อแทนกำหนดพรอมต์ (PS1) ของคุณและกำหนดการตั้งค่าอื่น ๆ ที่คุณต้องการใช้ทุกครั้งที่คุณเปิดหน้าต่างเทอร์มินัลใหม่
มันทำงานโดยการเรียกใช้ในแต่ละครั้งที่คุณเปิดหน้าต่างใหม่หรือเทอร์มินัล
คุณสามารถเห็นของฉันที่นี่(รูปที่มีการเน้นไวยากรณ์) :
HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"
คำอธิบาย:
-1 ตั้งค่าไฟล์ประวัติของฉันเพื่อละเว้นรายการซ้ำและมีขนาดใหญ่กว่าค่าเริ่มต้น
-2 ตัวเลือกสีls
ขึ้นอยู่กับว่าคุณใช้ linux หรือ OSX
-3 หรือไม่ ฟังก์ชัน " md
" เพื่อสร้างและ cd ลงในไดเรกทอรีด้วยคำสั่งเดียว
-4 ค้นหาสาขา git ปัจจุบันหากอยู่ใน git repo และ ...
-5 -9 กำหนดพรอมต์ PS1 ที่ยอดเยี่ยมดังที่ใน
-10 ปรับปรุง PS2 prompt
-11 ตั้งค่า vi เป็นเอดิเตอร์ที่บรรทัดรับคำสั่ง
-12 ตั้งค่า vi เป็นตัวแก้ไขเริ่มต้น
-13 รัน.bash_aliases
ไฟล์ของฉันถ้ามันมีอยู่
-14 เรียกใช้สคริปต์การทำให้สมบูรณ์ของแท็บ git (สำหรับรีโมทและสาขา) หากมีอยู่
-15 ดำเนินการ autojump ถ้ามี
-16 อนุญาตให้ cd'ing โดยไม่ต้องพิมพ์ส่วนซีดีถ้ารุ่นทุบตี> = 4
-17 เรียกใช้งานสคริปต์การเติมเต็มของ bash หากมี
-18 ใช้ TMUX หากมี
-19 เพิ่ม rvm ใน PATH ของฉัน
-20 ใช้ rvm หากมีอยู่
ฉันทำแบบพกพานี้เพื่อให้ทำงานบนเครื่อง linux หรือ OSX ใด ๆ ของฉันโดยไม่มีการปรับแต่ง - ดังนั้นจึงมีการทดสอบจำนวนหนึ่งสำหรับการแสดงตนก่อนที่จะใช้ฟังก์ชั่นและสคริปต์อื่น ๆ
นอกจากนี้ยังทำให้การใช้ไฟล์ทั้งหมดในเครื่องใหม่ง่ายขึ้นโดยไม่มีปัญหาที่ส่งผลต่อการเปิดหน้าต่างเทอร์มินัลใหม่
มันเป็นbash
ไฟล์ปรับแต่ง
เชลล์แบบอินเทอร์แอกทีฟ (ไม่ใช่การเข้าสู่ระบบ) ดังนั้นการกำหนดค่าจะอ่านจากไฟล์เหล่านี้:
$HOME/.bashrc
สำหรับเชลล์การเข้าสู่ระบบการกำหนดค่าจะถูกอ่านจากไฟล์เหล่านี้:
/etc/profile
(มีที่มาเสมอ)$HOME/.bash_profile
(ส่วนที่เหลือของไฟล์เหล่านี้จะถูกตรวจสอบตามลำดับจนกว่าจะพบหนึ่งแล้วไม่มีคนอื่นอ่าน)$HOME/.bash_login
$HOME/.profile
ภาพประกอบง่าย ๆ ว่าโหลดเมื่อไรอยู่ในรูปภาพด้านล่าง
ฉันเพิ่มecho
ของฉัน.bashrc
และ.bash_profile
ดูman bash
ข้อมูลเพิ่มเติม
.bashrc
และแยกความแตกต่างระหว่าง.bashrc
และ.bash_profile
ที่ครอบคลุมเนื้อหาของคำตอบของคุณ อย่าท้อแท้คุณพยายามอย่างซื่อสัตย์ แต่พยายามเน้นการตอบคำถามด้วยเนื้อหาบางส่วนที่ไม่ครอบคลุมโดยคำตอบอื่น ๆ