ฉันจะทำให้ Bash เปลือกเริ่มต้นของฉันบน Ubuntu ได้อย่างไร


101

ฉันมี.bash_profileในโฮมไดเร็กตอรี่ของฉัน, แต่มันไม่ได้ถูกเรียกใช้บนล็อกอิน. ถ้าฉันทำสิ่งต่อไปนี้สิ่งต่าง ๆ ดูเหมือนจะเป็นอย่างที่ฉันคาดไว้:

ssh myhost
bash
source ~/.bash_profile

แต่ตามปกติแล้วทุกอย่างจะเกิดขึ้นกับการเข้าสู่ระบบ คิด?


3
ตรวจสอบให้แน่ใจว่าคุณไม่มี~/.profileหรือ~/.bash_loginเพราะมีเพียงหนึ่งในสามที่มีที่มา (ผมลืมลำดับที่แน่นอน.)
grawity

3
ทำไมคุณมีคำถามที่แตกต่างกันในชื่อเรื่องและอีกคำถามหนึ่งในเนื้อหาของโพสต์
pabouk

คำตอบ:


170

ใช้:

chsh

ป้อนรหัสผ่านและระบุพา ธ ไปยังเชลล์ที่คุณต้องการใช้

/bin/bashสำหรับทุบตีที่จะเป็น สำหรับ zsh /usr/bin/zshที่จะเป็น


15
1 - ไม่แน่ใจว่าทำไม OP ตัดสินใจว่าการแก้ไขไฟล์รหัสผ่านเป็นทางเลือกที่ดีกว่า แต่นี้เป็นคำตอบที่ดีที่สุด
kdgregory

1
ใช่ฉันชนะมันเป็นวิธีมาตรฐาน
John T

1
และบน Ubuntu เส้นทางที่คุณต้องการใช้คือ ... / bin / bash (และ / bin / sh ไม่เหมือนกัน)
Harry Wood

49
หรือคุณสามารถใช้sudo chsh -s /bin/bash username
Oleg Vaskevich

7
คุณต้องออกจากระบบและลงชื่อเข้าใช้ใหม่เพื่อดูการเปลี่ยนแปลงนี้
Neil Traft

37

นอกจากคำตอบของอากิระคุณยังสามารถแก้ไขไฟล์/ etc / passwdของคุณเพื่อระบุเชลล์เริ่มต้นของคุณ

คุณจะพบบรรทัดเช่นตัวอย่างนี้:

john:x:1000:1000:john,,,:/home/john:/bin/sh

เชลล์ถูกระบุในตอนท้าย


8
ดีกว่าที่จะใช้คำสั่ง 'chsh' ตามที่แนะนำโดย akira - โอกาสน้อยที่จะทำให้พลาดโดยไม่ตั้งใจ
ลาร์ส Haugseth

5
ไม่ต้องพูดถึง 'chsh' จะใช้ได้เมื่อคุณไม่สามารถเขียน / etc / passwd
นักต้มตุ๋น Quixote

1
แต่ถ้าคุณสามารถแก้ไข/etc/passwdและคุณระวังคำตอบของ John คือการใช้เครื่องมือที่ระบบจัดให้อย่างดี
AJP

3
คุณต้องออกจากระบบและลงชื่อเข้าใช้ใหม่เพื่อดูการเปลี่ยนแปลงนี้
Neil Traft

2
หากคุณใช้เซิร์ฟเวอร์ที่ไม่มีรหัสผ่านของผู้ใช้ - ให้การเข้าถึงผ่านคีย์ ssh สาธารณะ / ส่วนตัวเท่านั้น ... chsh ต้องใช้รหัสผ่าน
Keith John Hutchison

4

คุณอาจตรวจสอบโปรแกรมปลายทางของคุณ อาจถูกกำหนดค่าให้เรียกใช้ / bin / sh แทน / bin / bash

Bash ดำเนินการ. bash_profile สำหรับเซสชันการเข้าสู่ระบบเท่านั้น .bashrc ถูกเรียกใช้งานสำหรับเซสชัน bash ทั้งหมดไม่ใช่เฉพาะเซสชันการเข้าสู่ระบบ ลอง sourcing .bash_profile จาก. bashrc (หลีกเลี่ยงการพึ่งพาแบบวงกลม!) หรือกำหนดค่าโปรแกรมเทอร์มินัลของคุณเพื่อรัน / bin / bash -l เป็นโปรแกรมเชลล์


2
โปรแกรมเทอร์มินัลไม่เกี่ยวข้องกับปัญหาเพราะเป็น sshd บนเครื่องรีโมตซึ่งวางไข่เชลล์ใหม่
akira

2

ทางเลือกหนึ่งคือเปลี่ยนชื่อสคริปต์เริ่มต้นของคุณเป็น. profile ไฟล์นี้จะเป็นแหล่งที่มาโดยส่วนใหญ่เปลือกหอย Unix


2

เปิดใช้งาน bash:

$ /bin/bash

เปลี่ยนเชลล์สำหรับผู้ใช้:

$ sudo usermod -s /bin/bash username

ที่อยู่:

  -s, --shell SHELL             new login shell for the user account

2
(1) คุณหมายถึงอะไรโดย“ enable bash” (2) ผู้ใช้ต้องการเปลี่ยนล็อกอินเชลล์ของตนเองบนระบบรีโมต ทำไมคุณคิดว่าเขาsudoสามารถเข้าถึงระบบนั้นได้? ทำไมคุณถึงให้คำแนะนำในแง่ของการเปลี่ยนเปลือกเข้าสู่ระบบของผู้ใช้คนอื่น?
G-Man

การใช้ chsh (ตามที่แนะนำข้างต้น) ไม่ได้ผลสำหรับฉัน คำสั่งนี้ทำ!
ต่อ Lindberg

1

หากต้องการทำให้เชลล์เป็นค่าเริ่มต้นให้ตรวจสอบก่อนว่าติดตั้งและรับรู้บนคอมพิวเตอร์ของคุณโดยดูที่เนื้อหาของ/etc/shells:

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/fish

จากนั้นใช้chshเพื่อเปลี่ยนเปลือกของคุณ:

$ sudo chsh -s /usr/bin/bash $(whoami) # or sudo chsh -s /bin/bash $(whoami)

อ้างอิง

  1. https://linux.die.net/man/1/cat
  2. https://linux.die.net/man/1/whoami
  3. https://linux.die.net/man/5/shells
  4. https://linux.die.net/man/1/chsh

0

คำถามของคุณมีข้อมูลไม่เพียงพอที่ฉันจะพูดได้อย่างแน่นอน แต่ฉันเคยประสบปัญหาเดียวกันมาก่อน สมมติว่าคุณได้รับ / bin / bash ตั้งไว้ในรายการรหัสผ่านของคุณมันอาจเป็นวิธีที่เทอร์มินัลของคุณเปิดตัว

หากคุณพยายามเปิดใช้งานเทอร์มินัล GUI บอกว่าgnome-terminalคุณอาจคาดว่าเชลล์จะอ่านไฟล์ bash startup ของคุณ อย่างไรก็ตามสิ่งนี้จะไม่เกิดขึ้นบน Ubuntu และอาจเป็นระบบอื่นตามค่าเริ่มต้น

วิธีที่ผมได้แก้ไขมันบน Ubuntu คือการแก้ไขการตั้งค่า gnome-terminal, bash -lและการตั้งค่าคำสั่งเริ่มต้นที่จะเป็น สั้นสำหรับ-l --loginสิ่งนี้บอกว่า bash to startup เป็น login shell ซึ่งเป็นสาเหตุให้โหลดสคริปต์เริ่มต้นเมื่อคุณเข้าสู่ระบบผ่าน ssh

ฉันแน่ใจว่ามีเหตุผลที่ดีสำหรับการเป็นแบบนี้ แต่ฉันพบว่ามันน่าแปลกใจและน่ารำคาญกว่าเล็กน้อยเมื่อฉันแชร์โปรไฟล์เดียวกันในระบบ linux, cywgin และ macos

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