bash_profile ทั่วโลก


20

ฉันรู้ว่ามี/etc/profileและ/etc/bashrcไฟล์สำหรับตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลกและบางทีฉันแค่เข้าใจผิดวัตถุประสงค์ของพวกเขา แต่ ...

มีbash_profileไฟล์ทั่วโลกหรือไม่

ฉันใช้ Mac OS X

คำตอบ:


15

มันไม่ได้เรียกว่าแต่สถานที่ที่เป็นมาตรฐานสำหรับการกำหนดค่าทุบตีทั่วโลกbash_profile /etc/bash.bashrcเป็นเรื่องปกติที่จะเรียกสิ่งนี้/etc/profileว่า ตัวอย่างเช่น/etc/profileฉันมี:

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1=’0
    if [ f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  fi
fi

ในแง่ของการใช้งาน/etc/profileจัดเตรียมการกำหนดค่าทั้งระบบสำหรับเชลล์ที่ใช้งานร่วมกับ Bourne ได้ทั้งหมด (sh, bash, ksh ฯลฯ ) ปกติแล้วไม่จำเป็นต้องมีสิ่งที่เทียบเท่า/etc/bash_profileเพราะเจตนาของไฟล์โปรไฟล์คือการควบคุมพฤติกรรมการเข้าสู่ระบบเปลือกหอย โดยปกติแล้วสิ่งที่คุณต้องการจะทำจะไม่เฉพาะเจาะจงทุบตี /etc/bash.bashrcเฉพาะทุบตีและจะทำงานสำหรับทั้งเปลือกเข้าสู่ระบบและไม่ใช่เข้าสู่ระบบ

สิ่งที่ซับซ้อนต่อไปก็ดูเหมือนว่า OS X /etc/bash.bashrcไม่ได้มี นี่อาจเกี่ยวข้องกับความจริงที่ว่าเทอร์มินัลใน OS X เป็นค่าเริ่มต้นให้ทำงานเป็นเชลล์ล็อกอินดังนั้นความแตกต่างจะหายไป:

ข้อยกเว้นสำหรับแนวทางหน้าต่างเทอร์มินัลคือ Terminal.app ของ Mac OS X ซึ่งรันเชลล์การเข้าสู่ระบบตามค่าเริ่มต้นสำหรับแต่ละหน้าต่างเทอร์มินัลใหม่เรียก. bash_profile แทน. bashrc ตัวเลียนแบบเทอร์มินัล GUI อื่นอาจทำเช่นเดียวกัน แต่ส่วนใหญ่มักจะไม่ทำเช่นนั้น

ฉันไม่ได้ใช้ OS X ดังนั้นขอบเขตของความรู้ของฉันจึงอยู่ที่นั่น


อย่าอ่าน/etc/bash.bashrcจากเชลล์ที่ไม่มีการโต้ตอบ /etc/profileสามารถอ่านได้โดยเชลล์ที่ไม่มีการโต้ตอบ ดูความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอินใช่หรือไม่
Gilles 'หยุดชั่วร้าย'

@Gilles - ฉันไม่ชัดเจนว่าคุณกำลังพยายามทำอะไรที่นี่ เชลล์ล็อกอินที่ไม่มีการโต้ตอบเป็นสิ่งผิดปกติอย่างแน่นอน สำหรับการอ้างอิงรหัสที่ฉันอ้างไม่ใช่การสร้างของฉันเอง มันมาจากค่าเริ่มต้น/etc/profileใน Ubuntu 12.04 สิ่งที่คุณจะแนะนำแทนหากใครต้องการ/etc/profileที่จะถูกดำเนินการภายใต้ทุบตีเท่านั้นและไม่มีเปลือกที่รองรับ sh อื่น
ire_and_curses

/etc/profileไฟล์ระบบสำหรับระบบของฉันมีความคิดเห็นที่ด้านบนที่อ่าน: # System-wide .profile for sh(1). นี้หมายความว่าprofileมีที่shเฉพาะเจาะจง ไม่shทำงานอย่างใดก่อนbash?

@ Josh Voigts - เป็นส่วนหนึ่งของsh ถูกดำเนินการสำหรับ, และเชลล์ที่รองรับบอร์นอื่น ๆ ทั้งหมด bash/etc/profileshbash
ire_and_curses

@ire_and_curses ปรากฏไฟล์จะถูกเรียกว่า/etc/bashrcใน mac /etc/bash.bashrcไม่ นอกจากนี้ยังปรากฏว่าใช้งานได้/bin/shเช่นกัน
BrainStorm.exe

4

/etc/profilebash_profileเป็นระดับโลก ไม่มีไฟล์ที่เฉพาะเจาะจงในการทุบตีทุบตีเพียงแค่อ่านไฟล์มาตรฐานที่อ่านโดยเชลล์สไตล์บอร์นทั้งหมด นั่นคือสิ่งที่คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ

ดูมีไฟล์เทียบเท่า ".bashrc" ที่เชลล์อ่านทั้งหมดหรือไม่ สำหรับภาพรวมทั่วไปของไฟล์เริ่มต้นทั่วไปของ bash


0

ตั้งค่า Interactive Shell (Bash) ทั่วโลก

สิ่งนี้ไม่โหลด/etc/profileดังนั้นจึงไม่มีสิ่งใด/etc/profile.d/ถูกโหลด (ต่างจากล็อกอินเชลล์ดูที่สิ้นสุด)

ไฟล์โกลบอลสำหรับสิ่งนี้คือ / etc / bashrc หรือ /etc/bash.bashrc (ขึ้นอยู่กับการ-DSYS_BASHRC=ตั้งค่าสถานะในเวลารวบรวม):

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

โดยปกติแล้วควรปล่อยไฟล์นี้ตามที่ควร (เพื่อหลีกเลี่ยงความขัดแย้ง) กลยุทธ์ที่ฉันใช้นั้นคล้ายกับเชลล์ที่ใช้ล็อกอิน (/ etc / profile)

กลยุทธ์ของฉันคือต่อท้ายโหลดเดอร์ไปที่ไฟล์ด้านบน:

# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d

# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
  for script in /etc/bashrc.d/*.sh; do
    test -r "$script" && . "$script"
  done
  unset item
fi
EOF

ตอนนี้ฉันสามารถเพิ่มการปรับแต่ง n ไปยังไฟล์เชลล์โกลบอลแบบโต้ตอบ (ทุบตี) ได้อย่างง่ายดายโดยใส่ไฟล์. shfiles ใหม่ลงในไดเร็กทอรี /etc/bashrc.d

Colorize Grep ทั่วโลก

/etc/bashrc.d/grep.sh

alias grep='grep --color=auto'

คุณสามารถทำได้ด้วยหนึ่งซับนี้:

printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh

เปรียบเทียบ profile.d vs bashrc.d

หากหลังจากอ่านสิ่งนี้แล้วคุณยังไม่มั่นใจให้ทำเช่นนี้เพื่อโน้มน้าวตัวเอง:

printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh

เปิดเทอร์มินัลอีมูเลเตอร์ใหม่และค้นหาคำทั่วไปในไดเรกทอรีผู้ใช้ของคุณเช่น "the" using grep

grep -r 'the'

ไม่ควรมีสีใด ๆ ทำสิ่งเดียวกันในคอนโซลเสมือนโดยทำ CTRLALTF1 (โปรดจำไว้ว่าเซิร์ฟเวอร์ X ของคุณอาจทำงานที่ CTRLALTF7 เพื่อให้คุณสามารถสลับกลับได้หากลืมให้รีสตาร์ทตัวจัดการเดสก์ท็อปของคุณ)

grep -r 'the' 

จะให้ผลลัพธ์สีตามที่ต้องการ

ไม่ควรมีสีใด ๆ ทำสิ่งเดียวกันในคอนโซลเสมือนโดยทำCTRLALTF1(จำไว้ว่าเซิร์ฟเวอร์ X ของคุณอาจทำงานCTRLALTF7เพื่อให้คุณสามารถสลับกลับได้หากลืมให้รีสตาร์ทตัวจัดการเดสก์ท็อปของคุณ)

grep -r 'the' 

จะให้ผลลัพธ์สีตามที่ต้องการ

ล็อกอินเชลล์คือสิ่งที่คุณจะได้รับเมื่อคุณบูตเครื่องหรือเปลี่ยนคอนโซลเสมือนCTRLALTF1ผ่านFNthคอนโซลเสมือน

ล็อกอินเชลล์โหลด/etc/profileขณะโหลด/etc/profile.d/*.shไฟล์

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