Làm cách nào để thay đổi shell mặc định của tôi thành bash nếu tôi không có quyền truy cập vào chsh nor / etc / passwd?


8

Tôi đang làm việc trên một tài khoản Linux từ xa của trường đại học và vỏ mặc định thật đáng buồn cshkhi không hoàn thành tab. Làm cách nào để thay đổi vỏ mặc định của tài khoản của tôi thành bash? chshkhông có sẵn.


1
Trường đại học sử dụng hệ thống gì để lưu trữ tài khoản? ldapmodifycó thể làm việc.
dùng1686

Hoặc, nếu họ đang sử dụng NIS, ypchshnên là lệnh thích hợp.
m000

Nếu bạn chỉ muốn hoàn thành tab, bạn có thể thêm chúng vào ~ / .cshrc set filecset autolist.
Hennes

Câu trả lời:


11

Bạn có thể nên thử hỏi hệ thống của bạn nếu họ có thể thay đổi vỏ mặc định cho bạn. Nếu họ không thể hoặc sẽ không (như trường hợp khi tôi học đại học), cách giải quyết tôi sử dụng là thêm

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

để .cshrc. (Tất nhiên hãy đảm bảo thay thế /path/to/bashbằng một đường dẫn thực. Đây thậm chí có thể là phiên bản bashnằm trong thư mục chính của bạn, nếu phiên bản do hệ thống cung cấp quá lỗi thời so với sở thích của bạn.) để thực hiện việc này càng sớm .cshrccàng khả thi, để bạn tránh việc .cshrcxử lý bổ sung sẽ trở thành tranh luận một khi bashthay thế cshquy trình.


Điều này đã không làm việc cho tôi tại trường đại học của tôi. Tôi có lẽ sẽ phải nói chuyện với sysadmin.
2rs2ts

3

Bạn chỉ có thể kết nối với

ssh -t yourhost bash

để thực thi shell Bash tự động khi bạn đăng nhập.


Từ các ý kiến ​​dưới đây, bạn có thể thấy sự thay thế

ssh -t yourhost exec bash

execsẽ chạy một quy trình mới và thoát khỏi quy trình cũ, vì vậy cshquy trình sẽ thoát trực tiếp.

Nếu nối -lvào cuối lệnh làm đối số cho Bash, nó sẽ được coi là shell đăng nhập, nhưng có lẽ điều đó là không cần thiết.


1
ssh -t yourhost exec -a bash -l bashđể thay thế hoàn toàn lớp vỏ ban đầu, thay vì chạy như một quá trình bên trong lớp vỏ ban đầu.
chepner

@chepner: Thật thú vị, ssh -t host bashbản thân tôi đang sử dụng một giải pháp đơn giản trong tình huống tương tự, nhưng cách của bạn tốt hơn. Tôi chưa nghĩ execđến, cảm ơn! Tôi sẽ cập nhật bài viết với đề xuất của bạn.
Daniel Andersson

Mặc dù vậy, tôi có một chút ưa thích khi sử dụng các đối số cho bashlệnh tích hợp exec.
chepner

@chepner: À đúng rồi, tôi đã thử ngay bây giờ trên một máy chủ có zsh làm vỏ mặc định và nó bị lỗi trên cả hai -a-l. Tôi sẽ sửa đổi ví dụ trong câu trả lời của tôi.
Daniel Andersson

0

Giải pháp tốt nhất tôi tìm thấy là một trong số trên stackexchange. Đây là liên kết stackexchange và đây là giải pháp:

tạo một tệp .profile trong thư mục nhà của bạn và dán vào phần sau hoặc thêm vào cuối .profile của bạn nếu bạn đã có.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

0

Tôi đã tìm kiếm rất nhiều khi bạn sử dụng xác thực LADP qua PAM, tôi nghĩ giải pháp tốt nhất là đặt SHELL = / bin / bash exec / bin / bash vào tệp .profile trong thư mục nhà người dùng của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.