Làm cách nào để hiển thị đường dẫn hiện tại trong dấu nhắc lệnh trong sh của linux (không phải bash)?


43

Tôi muốn hiển thị đường dẫn hiện tại trong dấu nhắc sh (không phải bash shell), hiện chỉ hiển thị "#", tôi đã thử giới thiệu điều này

env PS1="$(whoami)@$(hostname):$(pwd)"

set PS1="$(whoami)@$(hostname):$(pwd)"

trong /etc/profile.

Nhưng rõ ràng điều này không làm mới khi thư mục được thay đổi hoặc người dùng thay đổi. Xin đề xuất một cách để làm cho năng động này.


1
Lưu ý rằng mỗi $()chương trình chạy một chương trình riêng biệt; nó sẽ nhanh hơn để sử dụng các biến môi trường, chẳng hạn như $LOGNAME, $HOSTNAME$PWDthay vào đó.
grawity

Một câu trả lời là sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép, tuy nhiên, đó hoàn toàn là câu trả lời đúng. Những gì bạn thực sự muốn làm là trì hoãn đánh giá mã bên trong lời nhắc của bạn cho đến khi lời nhắc được sử dụng.
MaasSql

Tất cả những gì bạn cần là sử dụng xuất "PS1 =" $ (whoami) @ $ (tên máy chủ): $ (pwd)> "sau đó chỉnh sửa / etc / profile và nối dòng này vào cuối.
SDsolar

Câu trả lời:


76

Thay thế lệnh trong dấu ngoặc kép "được mở rộng ngay lập tức. Đó không phải là những gì bạn muốn cho lời nhắc của bạn. Dấu ngoặc đơn 'sẽ duy trì các thay thế trong $PS1đó sau đó chỉ được mở rộng khi hiển thị dấu nhắc. Do đó, điều này sẽ làm việc:

export PS1='$(whoami)@$(hostname):$(pwd)'

Nếu bạn muốn ký hiệu đô la thông thường và một khoảng trắng ở cuối dấu nhắc của bạn, chỉ cần thêm $vào cuối (không cần thoát):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
Hoạt động như một cơ duyên sau khi thay đổi 'set' thành 'export' trong câu trả lời của bạn, export PS1='$(whoami)@$(hostname):$(pwd)$'tôi đã lưu thay đổi s thành /etc/profile. Cảm ơn bạn.
Bleamer

@Bleamer: setlàm việc cho tôi (nhưng tôi không có người bản xứ sh). Nhưng tôi sẽ thay đổi nó exportđể tuân thủ thiết lập của bạn.
mpy

2
Có cách nào để làm điều này vĩnh viễn? Hiện tại tôi phải làm điều đó mỗi lần tôi đăng nhập. Cảm ơn!
the.ufon

3
Bạn đã đặt dòng này để /etc/profile(xem câu hỏi) hoặc ~/.profile?!
mpy

+1, tuy nhiên, điều này sẽ cần một số dấu phân cách ở cuối. Như là, bạn nhận được một cái gì đó như foo@localhost:/home/fools -lakhi sử dụng ls -la.
phresnel

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
Tôi sợ rằng nó hoạt động cho bash shell không phải cho sh, khi tôi làm điều này, tôi nhận được \u@\h:\w>như là dấu nhắc lệnh của mình
Bleamer

1
Phải là một phiên bản sh khác nhau; như bạn có thể thấy từ dòng đầu tiên, nó hoạt động với tôi trong sh 4.2.
Jenny D

1
Đó có thể là trường hợp. Vỏ này là từ Busy Box. Cảm ơn bạn. Đánh giá cao sự giúp đỡ của bạn mặc dù.
Bleamer

@Bleamer, nó hoạt động với tôi BusyBox v1.19.4 built-in shell (ash).
cjm

Cảm ơn bạn đã phản hồi @cjm, mặc dù tôi sẽ tránh đào sâu hơn về vấn đề này.
Bleamer

5

Lệnh này hoạt động với tôi.

export PS1="\u@\h: \W:$"

Trong đó
\ u = tên người dùng
\ h = tên máy chủ
\ W Tên của thư mục hiện tại (không phải đường dẫn đầy đủ)


+1 cho tham số \ W
Dimitry K

3

Người ta có thể xem xét để điều chỉnh dấu nhắc bằng cách thêm một số màu. Ví dụ:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1
Đây là những gì tôi đang tìm kiếm. Tôi hy vọng tất cả mọi người thích một số màu sắc trong cuộc sống :)
Govind Kailas

Ít nhất là tôi làm. ;)
Arvid

1

Một câu trả lời là sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép, tuy nhiên, đó không hoàn toàn là câu trả lời đúng. Những gì bạn thực sự muốn làm là trì hoãn đánh giá mã bên trong lời nhắc của bạn cho đến khi lời nhắc được sử dụng.

set PS1="$(pwd)" 

đặt lời nhắc đến thư mục làm việc như lệnh set.

set PS1="\$(pwd)" 

KHÔNG mở rộng $ (pwd). Thay vào đó, PS1 được đặt thành giá trị bằng chữ của $ (pwd).

Kiểm tra / Hiểu điều này bằng cách chạy:

echo $PS1

. Nếu bạn thấy chuỗi: $ pwd, dấu nhắc của bạn hoạt động. Nếu bạn thấy đường dẫn theo nghĩa đen, lời nhắc bị hỏng vì nó đã được đặt tĩnh


1

Sử dụng lệnh dưới đây để thiết lập giống như trong cpanel.

xuất PS1='$(whoami)@$ nbHOSTNAME %%. *} [$ (pwd)] # '


Cảm ơn! Không có lựa chọn nào khác ở trên làm việc. Cái này đã làm. Đã làm tôi phát điên. Cảm ơn vì đã tiết kiệm sự tỉnh táo của tôi. HẠ!
Lee_Str
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.