Chèn dòng trống giữa các dấu nhắc dòng lệnh


8

Khi sử dụng dòng lệnh, nó thường rất lộn xộn. Làm cho nó bất tiện để kiểm tra các lệnh trong quá khứ và đầu ra của chúng chẳng hạn.

Tôi muốn có một dòng mới được thêm vào mỗi lần trước khi dấu nhắc lệnh được hiển thị. Thích như vậy:

<clutter>
<blank line>
name@machine:~$

Tôi sử dụng vỏ bash. Làm thế nào điều này có thể đạt được?


1
Tôi thích điều này: lifehacker.com/5840450/
Maerlyn

Câu trả lời:


21

Một cách để đạt được điều này là bằng cách sửa đổi .bashrctệp. Đơn giản chỉ cần đặt sau đây vào cuối .bashrctập tin.

PS1="\n$PS1"

Để giải thích cách thức hoạt động của nó, PS1là biến chứa những gì sẽ được hiển thị dưới dạng dấu nhắc. Tất cả điều này được nói là "được đặt PS1theo nội dung trước đó PS1, với một ký tự dòng mới được đặt trước". Đưa nó .bashrcvào hầu hết các bản phân phối chỉ khiến bash chạy nó mỗi khi bạn mở một vỏ tương tác (nhưng không phải là một vỏ đăng nhập - xem Sự khác biệt giữa Shell đăng nhập và Shell không đăng nhập? ).


2
Để giải thích cách thức hoạt động của nó, PS1 là biến chứa những gì sẽ được hiển thị dưới dạng dấu nhắc. Tất cả điều này có nghĩa là "đặt PS1 theo nội dung trước đó của PS1, với ký tự dòng mới được thêm vào trước".
Muzer

@Muzer Có lẽ bình luận của bạn có thể là một chỉnh sửa
rpax

@rpax ý hay, nộp. Đã thêm một chút về .bashrc.
Muzer

Hài lòng, thực thi PS1="\n$PS1"trong một thiết bị đầu cuối có hiệu quả ngay lập tức :)
mwfearnley

Hoạt động hoàn toàn tốt, ngoại trừ sau khi nhập clear(hoặc nhấn Ctrl+l) dòng đầu tiên được hiển thị là một dòng trống. Đối với một số người, đó có thể là một chi tiết nhỏ, nhưng tôi rất thích dòng đầu tiên là lời nhắc.
Robert Kusznier

6

Bạn có thể sử dụng PROMPT_COMMAND :

PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"

hoặc là:

PROMPT_COMMAND="echo;$PROMPT_COMMAND"

2
Nên là người đầu tiên PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"? Ở dạng hiện tại, nó dường như không làm gì khi tôi đặt nó vào .bashrctập tin.
Slothworks

@Slothworks: Vâng, tất nhiên, tôi gõ sai, đã sửa nó.
cuonglm

Nhiều hơn một cách để làm điều đó thực sự :) Cảm ơn bạn đã trả lời.
Slothworks

2
Sự thay thế của Slothworks là tốt hơn, bởi vì bạn thực thi một lệnh bổ sung sau mỗi lệnh được chạy ở dòng lệnh. printfvà tất nhiên echolà rất nhẹ, nhưng nó vẫn không có ý nghĩa để sử dụng PROMPT_COMMANDkhi nào PS1sẽ thực hiện công việc.
Mikkel

Lưu ý, nếu bạn muốn đặt một cái gì đó vào lệnh đã thay đổi mỗi khi bạn chạy lời nhắc, thì bạn muốn PROMPT_COMMAND chứ không phải PS1. Điều này thường được sử dụng với git để hiển thị nhánh nào của repo đang hoạt động. Đề xuất Google cho PROMPT_COMMAND để xem những gì có thể được thực hiện.
Walter

4

Thay thế: để lại một dòng trong PS1=dấu nhắc của bạn .bashrc. Đây là cách tôi thiết lập .bashrctrên mọi máy linux tôi có:

PS1=' 
serg@ubuntu [$(pwd)]
================================
$ '

Như bạn thấy trong ví dụ của tôi ở trên, tên người dùng được mã hóa cứng vào dấu nhắc. Tất nhiên bạn có thể sử dụng các chuỗi thoát mà bash hoặc shell khác (ví dụ: ksh ) cung cấp, nhưng một tùy chọn trung lập hơn một chút sẽ là sử dụng thay thế tham số bằng các lệnh như whoami(báo cáo tên người dùng của bạn) và hostname(rõ ràng, báo cáo tên máy chủ). Ví dụ:

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

Để biết thêm nhiều điều thú vị với lời nhắc .bashrcvà mở rộng tham số, hãy xem câu trả lời của tôi ở đây:

Làm thế nào để kiểm tra tình trạng pin bằng thiết bị đầu cuối?

Làm thế nào tôi có thể có được thiết bị đầu cuối / vỏ của mình để có thiết kế tùy chỉnh trong đó?

Làm thế nào để hiển thị một đồng hồ đang chạy trong thiết bị đầu cuối trước dấu nhắc lệnh?


Tại sao tên người dùng và tên máy được mã hóa cứng? Sẽ thật tuyệt nếu chúng được bán tham số
rpax

@rpax tên người dùng thực tế của tôi là khác nhau. Đó là tên của tôi mà bạn nhìn thấy trong lời nhắc. Tên máy cũng khác.
Sergiy Kolodyazhnyy

Ý tôi là một số loại $(whoami)thay vìusernamehardcoded
rpax

@rpax oh, điều đó cũng có thể được thực hiện. Tôi sẽ đưa câu trả lời vào câu trả lời của tôi
Sergiy Kolodyazhnyy

4
Lưu ý bạn có thể sử dụng \u\hcho tên người dùng và tên máy chủ của bạn, tương ứng. Bạn có thể xem thêm các ký tự đặc biệt (ví dụ: thời gian hiện tại ở các định dạng khác nhau) tại đây
Yossarian
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.