Lệnh Wrap trong dấu nhắc


7

Có thể chèn một dấu phân cách sau lệnh trong một dấu nhắc? Đây là một ví dụ:

~/Desktop: ls -al
-------------------------------------
total 80
drwx------+  6 eddie  staff   204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie  staff   1.8K Apr 30 10:54 ..

~/Desktop:

Cụ thể tôi muốn thêm phần --------- sau khi ban hành lệnh để phân biệt lệnh dễ dàng hơn với kết quả


3
Đối với mỗi lệnh? Cái quái gì vậy?
jordanm

Lý tưởng cho mọi lệnh thực sự có đầu ra. zsh
Eddie Monge Jr

Câu trả lời:


9

Trong zsh, bạn có thể xác định hàm hook preexecđể lặp lại một chuỗi đã chỉ định trước khi mọi lệnh được thực thi.

Trong bash, bạn có thể sử dụng DEBUGbẫy để thiết lập hook preexec để làm tương tự.

Bạn sẽ định nghĩa hàm preexec () giống như thế này:

preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
trap 'preexec_invoke_exec' DEBUG

Xem thêm chi tiết tại bash có hook nào được chạy trước khi thực hiện lệnh không?

Tôi không nghĩ rằng điều này hoạt động trong tất cả các phiên bản của bash. Trên máy chủ Ubuntu cũ của tôi, đang chạy bash 3.2.39 (1), help trapcho biết

Nếu một TÍN HIỆU là DEBUG, ARG được thực thi sau mỗi lệnh đơn giản.

Trên một máy chủ khác, đang chạy bash 4.1.2 (1), nó nói

Nếu một TÍN HIỆU là DEBUG, ARG được thực thi trước mỗi lệnh đơn giản.

đó là những gì chúng ta cần. Vì vậy, hãy chắc chắn rằng trong phiên bản bash của bạn, hãy help trapnói " trước mỗi lệnh đơn giản."


5

Nếu bạn đang sử dụng bash hoặc ksh cho shell của mình, bạn có thể tạo một hàm trong một trong các dotfiles của mình (.profile, .bash_profile, v.v.) như vậy:

function hr {
    echo "--------------------------------------------------------------------------------"
}

Sau đó, bạn có thể thêm nó vào các lệnh bất cứ khi nào bạn muốn phân tách đó bằng cách sử dụng &&hoặc ;làm phân cách lệnh. Như trong:

bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp  prtconf-pv

hoặc là

bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x  2 tim staff    4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff  134 2013-04-30 14:59 ../
-rw-------  1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r--  1 tim staff  24K 2012-12-06 15:02 prtconf-pv

Tôi làm việc này. Tôi có một chức năng thứ hai cũng in một dải phân cách dày hơn.

function hr2 {
    echo "================================================================================"
}

Tôi thường sử dụng các hàm này trong các tập lệnh shell để phân tách các phần khác nhau của tập lệnh, chẳng hạn như hr2giữa các tác vụ chính và hrgiữa các mục trong một câu lệnh lặp. Nó làm cho việc đọc kịch bản đầu ra dễ dàng hơn nhiều.


2
Tại sao không function hr { echo '---…'; "$@"; }thay thế? Sau đó, bạn có thể sử dụng nó mà không &&hoặc ;quá : hr ls -la. Nhân tiện, một dải phân cách thậm chí dày hơn : figlet -- '---…'.
manatwork

chủ yếu là vì tôi chưa bao giờ nghĩ về điều đó cảm ơn vì ý tưởng :)
Tim Kennedy
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.