Làm thế nào để tránh dấu ngã ~ trong dấu nhắc Bash?


12

Tôi muốn loại bỏ dấu ngã khỏi hiển thị trong biến PS1.

Chuỗi PS1 hiện tại của tôi:

PS1="\h:\w\n$"

Và lời nhắc trông như thế này:

lnx-hladky:/tmp/plugtmp
$

Tôi không thích rằng thư mục $ HOME được hiển thị dưới dạng dấu ngã. Điều này có thể tránh được không?

Nó gây ra vấn đề, ví dụ:

lnx-hladky:~/DOC
$  

Tài liệu nói:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

Có khả năng nào để tránh $ HOME bị viết tắt bằng dấu ngã không?

Tôi đã tìm thấy một cách xung quanh nhưng tôi cảm thấy như nó quá phức tạp:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

Bất cứ ai có thể đề xuất một giải pháp tốt hơn? Tôi có cảm giác không ổn lắm khi chạy quá nhiều lệnh chỉ để nhận được dấu nhắc. (ngày, whoami, tên máy chủ, pwd).


"vấn đề" nào mà dấu ngã gây ra trong ví dụ?
JBallin

Câu trả lời:


11

bash chạy mở rộng trong dấu nhắc; chỉ cần chắc chắn để thoát khỏi chúng.

PS1='\h:$(pwd)\n$'

Điều đó trả lời câu hỏi của tôi. Tôi không biết có khả năng như vậy. Cảm ơn rất nhiều, Ignacio!
Jirka

2
@Jirka: Bạn cũng có thể sử dụng: `PS1 = '\ h: $ PWD \ n $'.
Tạm dừng cho đến khi có thông báo mới.

1
Giải pháp của Jirka thực thi pwdtrên mọi dấu nhắc. Giải pháp của Dennis thì không, chỉ lấy các biến môi trường PWD, rẻ hơn nhiều.
Stéphane Gourichon

2
pwdlà một bash dựng sẵn. Sự khẳng định ${PWD}là "rẻ hơn nhiều" so với $(pwd)không có bằng chứng.
Vine

1
@anxieux: bạn phải trích dẫn bằng dấu ngoặc đơn, không phải dấu ngoặc kép
weberjn

0

Bạn không cần phải chạy nhiều lệnh như trong ví dụ của mình. bashcung cấp các phím tắt cho hầu hết những điều bạn đề cập.

Ví dụ của bạn:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

có thể được viết lại thành:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Trong đó \thiển thị thời gian (ở định dạng 24 giờ), \uhiển thị tên người dùng hiện tại, '\ h' hiển thị tên máy chủ - bashtrang man thảo luận về những điều này và phần còn lại của các lối thoát có sẵn cho lời nhắc của bạn.

Ngay cả khi bạn mở rộng ~đường dẫn đầy đủ, nếu bạn không biết người dùng nào đang chạy lệnh và bạn đang chuyển đổi người dùng thường xuyên, bạn có thể tạo ra sự cố với quyền truy cập tệp hoặc quyền thực thi.


Xin chào, ý định của tôi là thay thế \ w bằng đường dẫn đầy đủ bao gồm đường dẫn FULL $ HOME. Cảm ơn Ignacio Tôi hiện đang sử dụng PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' đã giải quyết vấn đề của tôi :-)
Jirka

Hoàn hảo - Tôi thích bao gồm \uđể tôi biết mình là ai. Đừng quên chấp nhận câu trả lời của Ignacio - nhấp vào hộp kiểm bên trái câu hỏi.
Doug Harris

Cảm ơn đã gợi ý. Tôi mới tham gia diễn đàn này. Đó là một nơi tuyệt vời.
Jirka

\ u @ \ h: $ PWD (lưu ý dấu hai chấm) có thể được sử dụng làm đầu vào cho scp
weberjn

0

Tôi đang sử dụng cài đặt bên dưới trong tệp .bash_profile của mình

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
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.