ความแตกต่างระหว่าง ~ / .profile และ ~ / .bash_profile คืออะไร


58

ความแตกต่างระหว่าง~/.profileและ~/.bash_profileคืออะไร?



1
และสำหรับส่วนอื่น ๆ ของคำถามของคุณดูunix.stackexchange.com/questions/3052/alternative-to-bashrc
Gilles 'SO- หยุดความชั่วร้าย'

คำตอบ:


44

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


ถ้าฉันผิดทำถูกต้องฉัน .. . profile ถูกใช้โดยเชลล์ที่รองรับบอร์นใด ๆ ในขณะที่. bash_profile ถูกใช้โดย bash เท่านั้น .. ฉันใช่ไหม?
lakesh

2
@lakesh: ใช่เปลือกใด ๆ .profileให้เข้ากันบอร์นจะอ่าน เช่นbashและkshแต่ไม่หรือcsh tcshและzshให้ทั้งสองshและcshเข้ากันได้ดังนั้นมันจะอ่านทั้งสอง.profileและ.loginเช่นเดียวกับzshไฟล์จุดที่เฉพาะเจาะจง
บาฮามาต

มีการสอนใด ๆ เพื่ออ่านข้อมูลเกี่ยวกับ bash และ ksh นี้หรือไม่? ไม่เคยได้ยินสิ่งเหล่านี้มาก่อน ...
lakesh

4
คุณสามารถเริ่มต้นกับประวัติเชลล์ยูนิกซ์
บาฮามาต

25

ต้นฉบับshมาจากการ.profileเริ่มต้น

bashจะพยายามที่จะมา.bash_profileครั้งแรก แต่ถ้าที่ไม่อยู่ก็จะมาที่ 1.profile

โปรดทราบว่าถ้าbashจะเริ่มต้นเป็นsh(เช่น/bin/shการเชื่อมโยงไปยัง/bin/bash) หรือเริ่มต้นด้วย--posixธงมันพยายามที่จะเลียนแบบและมีเพียงอ่านsh.profile

เชิงอรรถ:

  1. อันที่จริงคนแรกของ.bash_profile, .bash_login,.profile

ดูสิ่งนี้ด้วย:


2
เยี่ยมมาก .. ขอบคุณ ... โดยเฉพาะสำหรับการอ้างอิง ...
lakesh

10

คุณรู้ว่ามีกระสุนจำนวนมากในโลก UNIX แต่ส่วนใหญ่เป็น:

  • เชลล์เป้าหมาย : /bin/sh(นักประดิษฐ์: Stephen Bourne)
  • BASH (Bourne Again Shell): /bin/bash(ผู้ประดิษฐ์: Brian Fox ภายใต้โครงการ GNU) (กระสุนทรงพลัง)
  • C shell : /bin/csh(นักประดิษฐ์: Bill Joy, ผู้ประดิษฐ์ TCP / IP Stack)
  • Korn shell : /bin/ksh(ผู้ประดิษฐ์: David Korn ภายใต้ Bell Labs)
  • Z shell : /bin/zsh(กระสุนทรงพลัง)
  • TENEX C shell : /bin/tcsh(มาจาก C Shell)
  • Debian Almquist shell : /bin/dash(มาจาก Almquist shell (เถ้าภายใต้โครงการ NetBSD)) (Dash เกิดจาก lenny)

แต่คำถามของคุณเกี่ยวกับ~/.bash_profileและ~/.profile:

เมื่อคุณล็อกอินเข้าสู่เครื่อง UNIX มันจะเปลี่ยนเส้นทางไปยังโฮมไดเร็กตอรี่ของคุณ, ตามเชลล์ที่ผู้ดูแลระบบเลือกในฟิลด์สุดท้าย/etc/passwdเช่น:

mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/bin/bash

เปลือกของคุณทำงานและเริ่มต้นแต่ละเปลือกมีไฟล์ชุดและlogin logoutเมื่อคุณเข้าสู่ระบบในทุบตี~/.profileมีการเรียกใช้และเมื่อคุณlogout, ~/.bash_logoutมีการเรียกใช้ ~/.bash_historyไฟล์เก็บคำสั่งอินพุตของคุณ

ไฟล์การเริ่มต้นในแต่ละเชลล์

TENEX C เชลล์

  • ~/.login เมื่อคุณเข้าสู่ระบบ
  • ~/.logout เมื่อคุณออกจากระบบ
  • ~/.tcshrcเช่นเดียวกับ~./bashrcในทุบตี

คุณสามารถตั้งค่าตัวแปร$histfileเป็นชื่อไฟล์ประวัติและตัวแปร$historyเป็นจำนวนคำสั่งที่จะเก็บไว้

เปลือก Z

แน่นอนว่ามันคือกระสุนที่ทรงพลังและถ้าคุณได้รับเวลาว่างให้แน่ใจว่าได้ย้ายไปยังมัน

ยกเว้นเชลล์อื่นเชลล์ Z มีไฟล์กำหนดค่าและไฟล์กำหนดค่าเริ่มต้นมากมายฉันแค่เขียน:

$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
/tmp/zsh*
/etc/zshenv
/etc/zprofile
/etc/zshrc
/etc/zlogin

หมายเหตุ: หาก$ZDOTDIRไม่มีการตั้งค่าชุดโฮม

C เชลล์

หมายเหตุ: TENEX C เชลล์แยกจาก C เชลล์ C เชลล์รองรับโดย BSD หากคุณคุ้นเคยกับการเขียนโปรแกรมภาษา C คุณควรสบายใจเนื่องจากไวยากรณ์นั้นคล้ายกัน

~/.login
~/.cshrc
~/.logout

หมายเหตุ: csh เก่า ใช้ tcsh แทน

เปลือกหอย

  • ~/.profile
  • ไฟล์ rc: ผู้ใช้กำหนด
  • ไฟล์ล็อกเอาต์: N / A

Bourne Again Shell (BASH)

มันเป็นเชลล์ที่ทรงพลังมากและเกิดภายใต้โครงการ GNU และถูก Bourne Shell นำเสนอ

~/.bash_login
~/.bash_logout
~/.bashrc
~/.bash_profile
~/.bash_history

เมื่อคุณเข้าสู่ระบบทุบตีวิ่ง~/.bash_profileและวิ่ง~/.bash_profile ~/.bashrcอันที่จริง~/.bashrcไม่ได้เป็นไฟล์เริ่มต้นทุบตีเพราะทุบตีไม่ทำงาน

เชลล์เป้าหมาย

มันตายแล้ว แม้ในขณะที่คุณใช้คุณจะเห็นด้วยตนเองman sh dash[หมายเหตุบรรณาธิการ: ส่วนเล็กน้อยdashใช้กับดิสทริบิวชั่นเดเบียนและเดเบียนอย่าง Ubuntu เท่านั้น]

คำตอบของคุณ

~/.bash_profileทำงานภายใต้ bash แต่~/.profileทำงานภายใต้ Bourne และ Korn shell


2
Chet Ramey เป็นผู้พัฒนาหลักของ Bash
tripleee

4

เปลือกเข้าสู่ระบบเป็นเพียงเปลือกคุณสามารถเข้าสู่ระบบผ่านทางมัน ssh หรือที่คอนโซล เชลล์ที่ไม่ใช่การล็อกอินคือเชลล์ที่บางคนไม่สามารถล็อกอินได้เช่นกัน เชลล์ที่ไม่ใช่การล็อกอินมักถูกใช้โดยโปรแกรม / บริการของระบบ

สำหรับจุดที่สามของคุณ เป็นจริง.bashrcถูกดำเนินการในแต่ละอินสแตนซ์ของเชลล์ อย่างไรก็ตาม.bash_profileจะใช้เฉพาะเมื่อเข้าสู่ระบบ ดังนั้นเหตุผลสำหรับทั้งสองไฟล์แยกกัน

.profileสำหรับสิ่งที่ไม่เกี่ยวข้องโดยเฉพาะกับ Bash เช่นตัวแปรสภาพแวดล้อม $ PATH มันควรจะใช้ได้ทุกเวลา .bash_profileมีไว้สำหรับล็อกอินเชลล์หรือเชลล์ที่ดำเนินการเมื่อล็อกอิน


ความแตกต่างระหว่าง ~ / .profile และ ~ / .bash_profile หรือไม่
lakesh

2
.profile สำหรับสิ่งที่ไม่เกี่ยวข้องกับ Bash โดยเฉพาะเช่นตัวแปรสภาพแวดล้อม PATH มันควรจะมีให้ทุกเวลาเช่นกัน .bash_profile มีไว้สำหรับล็อกอินเชลล์หรือเชลล์ที่ดำเนินการเมื่อล็อกอิน
anzenketh

เพิ่มคำสั่งนั้นในคำตอบของคุณ .... เพราะนั่นคือสิ่งที่คำถามของฉันคือ ....
lakesh

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