Tại sao dấu nhắc Linux của tôi hiển thị $, thay vì tên và đường dẫn đăng nhập?


13

Trên một trong các máy chủ của tôi, lời nhắc là [đường dẫn người dùng @ máy chủ] ... và tôi thực sự có thể đẩy "tab" để tự động điền đường dẫn.

Nhưng trên máy chủ Ubuntu mới của tôi, nó chỉ là một ký hiệu đô la?


1
Bạn luôn có thể gõ pwdđể in tên của thư mục làm việc hiện tại. Và bạn có nói rằng việc hoàn thành Tab cũng không hoạt động? . , là bạn phải không?)
Arjan

Alex bạn có thể cho chúng tôi biết bạn đang sử dụng bản phân phối nào không?
đảo ngược

Tôi đang sử dụng Ubuntu.
Alex

Ubuntu mới nhất? Và bạn có nói rằng việc hoàn thành Tab cũng không hoạt động?
Arjan

Có vẻ như bạn đang hỏi hai câu hỏi: tại sao tab không tự động điền đường dẫn và tại sao lời nhắc chỉ là ký hiệu đô la thay vì [đường dẫn người dùng @ máy chủ]. Có một chút khó khăn để bỏ phiếu cho câu trả lời vì không có câu trả lời nào cả.
Joseph Holsten

Câu trả lời:


27

Vì bạn đang hỏi hai câu hỏi, tôi sẽ trả lời cả hai.

Tại sao tab không tự động hoàn thành đường dẫn tệp?

Bởi vì bạn shell không hỗ trợ nó, hoặc hoàn thành tab không được bật.

Để giải quyết điều này, trước tiên bạn cần khám phá vỏ của bạn là gì. Trên máy có vỏ bạn thích, hãy chạy

echo $SHELL

Bạn có thể thấy cái chung /bin/bash, hoặc cái gì đó ít phổ biến hơn /bin/tcsh, /bin/zshhoặc cái gì khác hoàn toàn.

Bây giờ, bạn có thể thay đổi vỏ của mình trên máy Ubuntu. Trên máy đó, trước tiên hãy đảm bảo rằng vỏ bạn muốn tồn tại. Vì hệ vỏ có thể không ở cùng một vị trí trên máy Ubuntu như trên máy khác, hãy kiểm tra vị trí bằng cách nhập

 which bash

Điều này sẽ cung cấp cho bạn đường dẫn của vỏ mà bạn muốn, cái gì đó như /bin/bash, /usr/bin/bashhoặc /usr/local/bin/bash. Tất nhiên, nếu bạn muốn có một vỏ ngoài bash, bạn sẽ nói which tcsh, which zshhoặc tương tự.

Nếu bạn không nhìn thấy đường dẫn, nhưng thay vào đó bash not found, bạn sẽ cần cài đặt gói thích hợp và sử dụng lại whichđể tìm nơi vỏ được cài đặt.

Với đường dẫn của vỏ bạn đã chọn, cuối cùng bạn có thể thay đổi vỏ của mình bằng cách chạy

chsh -s /bin/bash

thay thế /bin/bashbằng bất cứ con đường thích hợp nào cho vỏ bạn chọn.

Tại sao lời nhắc là ký hiệu đô la thay vì [đường dẫn người dùng @ máy chủ]?

Bởi vì các biến môi trường nhanh chóng của bạn $PS1, $PS2và vân vân. Những thứ này không có xu hướng di động giữa các vỏ, vì vậy đây là một vài liên kết cho các ứng cử viên có khả năng:

bashcó một hướng dẫn sử dụng rộng rãi , với các trang về Biến Bash (bao gồm PS1, & c) và In một Dấu nhắc (mô tả PROMPT_COMMAND, tên dài cho PS1). Thêm dòng sau vào~/.bashrc

export PS1='[\u@\h \w] '

tcshcó một hướng dẫn trực tuyến (chỉ trang man của nó), với một phần về các biến môi trường nhanh chóng . Thêm dòng sau vào~/.tcshrc

set prompt='[%n@%m %~] '

zshcó một hướng dẫn sử dụng , với một hướng dẫn đơn giản để nhắc nhở , cũng như hướng dẫn sử dụng , với một tài liệu tham khảo rất chi tiết về Mở rộng Prompt . Thêm dòng sau vào~/.zshrc

export PS1='[%n@%m %~] '

6

Bash không phải là vỏ duy nhất.

Vấn đề của bạn có thể là vấn đề đơn giản khi không có .profile hoặc .bashrc đặt PS1 hoặc có thể là vỏ đăng nhập của bạn không bị lỗi gì cả.

Bash sử dụng gnu readlinecho những thứ như hoàn thành tab. Đây là một chủ đề phức tạp và readline thậm chí có tệp cấu hình cho mỗi người dùng riêng.

Xem man bash, man shman 3 readline. Bash đáp lại --version. Trên nhiều hệ thống linux, /bin/shkhông thực sự là bash, mà thường là phiên bản bị tê liệt ash.


1
không dashthay thế ash? tôi nghĩ rằng tôi đã đọc một cái gì đó như thế này
knittl

2
+1 vì không có .profile hoặc .bashrc - trừ khi Alex ban đầu thiết lập tài khoản của mình khi cài đặt Ubuntu, thì theo mặc định, người dùng mới không có .bashrc / không có PS1.
Cory Plastek

4

Tôi đoán, bạn không sử dụng bash, nhưng sh và dấu nhắc của bạn không được đặt đúng (nếu điều này thậm chí có thể xảy ra với sh).

bạn có thể lấy shell hiện tại của mình bằng cách gõ: echo $SHELL

nếu bạn muốn bắt đầu bash, chỉ cần gõ bash


Bạn có thể đặt lời nhắc với các shell khác. Không có vỏ gọi là sh. Echoing $SHELLsẽ in một biến môi trường được gọi là SHELL. Biến môi trường này chỉ đơn giản là trỏ đến shell và chỉ được đặt bởi bash. Nó gần như vô dụng trong việc xác định shell nào đang chạy, vì nó chỉ cho thấy, một cách yếu ớt, rằng một số cha mẹ của quá trình hiện tại có thể đã bị bash.
DigitalRoss

tốt, tên chương trình của shell là sh (in / bin / sh). và có, echo $ SHELL sẽ in biến SHELL thường được đặt.
knittl

Mỗi hệ thống unix có một thực thi được gọi /bin/sh, có. Nhưng tôi biết không có vỏ có tên sh. Tôi có thể nghĩ đến ash, ksh, csh, bash, zsh, và tcsh. Cái đầu tiên là shell / bin / sh thông thường trên linux và NetBSD, cái cuối cùng là shell FreeBSD thông thường và những cái khác là shell tùy chọn. Nhiều môi trường máy tính để bàn thay đổi vỏ đăng nhập của người dùng thành bash trong khi để lại / bin / sh dưới dạng tro.
DigitalRoss

2
@DigitalRoss shlà vỏ Bourne. vi.wikipedia.org/wiki/Bourne_shell Một số hệ thống (Solaris) vẫn đi kèm với một phiên bản vỏ Bourne không chỉ là bản sao của một trong những triển khai lại (ash, dash, bash, ksh, zsh).
Chris Johnsen

... Và bash được gọi là "Bourne shell shell", kế thừa một số tính năng từ vỏ Bourne, csh và ksh.
đảo ngược

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.