Cách chèn các tab trước các dòng đầu ra từ một lệnh đã thực hiện


16

Chỉ là một câu hỏi nhanh. Có thể lập tab đầu ra trên Ubuntu 16.04 LTS không? Tôi đã tạo hai hình ảnh dưới đây để thử và minh họa ý tôi là gì.

img1

img2


1
Sẽ ổn chứ nếu bạn phải chuyển đầu ra lệnh thông qua một lệnh khác như YOUR COMMAND | indenthoặc nếu bạn phải gõ một lệnh khác ở phía trước nó (thậm chí có thể chỉ là một dấu gạch dưới) như thế _ YOUR COMMANDnào?
Chỉ huy Byte

1
@ByteCommander Tôi đã xem xét điều đó, tuy nhiên tôi đang làm điều này để dễ sử dụng và để làm cho đầu ra giao diện điều khiển dễ đọc hơn. Vì vậy, tôi không nghĩ rằng tất cả các lệnh của tôi là giải pháp. Cảm ơn bạn đã phản hồi và chỉnh sửa mặc dù!
Alex Ng

1
[Xin vui lòng không đăng screeshots của đầu ra văn bản. ] ( meta.askubfox.com/q/8713/85695 )
terdon

Câu trả lời:


15

Bạn có thể làm một cái gì đó như thế này - với mô tả tập tin:

  1. lưu mô tả đầu ra hiện tại để chúng tôi có thể khôi phục nó sau

    exec 3>&1
  2. chuyển hướng luồng đầu ra sang một sự thay thế quá trình chèn tab - ví dụ

    exec 1> >(paste /dev/null -)

Từ thời điểm này, bất kỳ quá trình nào ghi vào đầu ra tiêu chuẩn sẽ có đầu ra đó được 'lọc' thông qua pastelệnh để chèn các tab khi bắt đầu.

  1. Khi bạn hoàn tất, bạn có thể tiếp tục hành vi bình thường bằng cách khôi phục bộ mô tả tệp đã lưu và đóng tạm thời

    exec 1>&3 3>&-

Tôi muốn cảm ơn bạn đã trả lời. Đây là cách gần nhất tôi đã đi đến một giải pháp mặc dù nó không hoàn hảo.
Alex Ng

@AlexNg cảm ơn vì upvote - cụ thể là nó không làm những gì bạn yêu cầu? nếu bạn cho tôi biết tôi sẽ cố gắng cải thiện nó
Steeldo

Để đưa ra một vài ví dụ: Sau khi nhập các lệnh của bạn, một số lệnh hoạt động như dự định, chẳng hạn như 'php -v', 'tên máy chủ' và các lệnh khác. Tuy nhiên, khi sử dụng một lệnh như 'echo Hello World', đầu ra được hiển thị nội tuyến với đầu vào và nó cũng ảnh hưởng xấu đến giao diện trực quan đầu vào khi nhập lệnh tiếp theo. Một số lệnh khác cũng không bị ảnh hưởng bởi quá trình lập bảng, chẳng hạn như khi nhập lệnh không hợp lệ, chẳng hạn như 'asdasd'.
Alex Ng

Cuối cùng, nó không hiển thị chính xác đầu ra mà thay đổi (không chắc làm thế nào để mô tả đúng, xin lỗi). Ví dụ: nếu lệnh 'apt-get update' được sử dụng, có những khác biệt đáng chú ý khi so sánh nó với bảng điều khiển mà không có quá trình lập bảng.
Alex Ng

Vấn đề là cách tiếp cận này chỉ xử lý STDOUT (luồng 1), chứ không xử lý STDERR (luồng 2). Nó cũng phá vỡ đầu ra của các chương trình sử dụng lesshoặc các công cụ tương tự để cho phép cuộn đầu ra, ví dụ như man.
Chỉ huy Byte

9

Tôi hiểu câu trả lời này không tối ưu cho bạn, nhưng bạn có thể tạo hàm Bash bằng tên đơn giản _(hoặc bất kỳ thứ gì khác chưa được sử dụng) chạy lệnh mà nó nhận làm đối số và thụt đầu ra tất cả đầu ra của nó bằng một tab.

Một ví dụ:

$ _ lsb_release -a
        No LSB modules are available.
        Distributor ID: Ubuntu
        Description:    Ubuntu 16.04 LTS
        Release:    16.04
        Codename:   xenial

Mã của chức năng này sẽ chỉ là thế này:

_(){ sed "s/^/\t/" <($*); }

Bạn có thể nối nó vào ~/.bashrctệp của mình để nó sẽ có sẵn trong tất cả các phiên Bash của người dùng của bạn bằng cách chạy:

echo '_(){ sed "s/^/\t/" <($*); }' >> ~/.bashrc

Nếu bạn muốn làm cho nó có sẵn cho tất cả người dùng, /etc/bash.bashrcthay vào đó hãy thêm nó vào (yêu cầu quyền quản trị):

echo '_(){ sed "s/^/\t/" <($*); }' | sudo tee -a /etc/bash.bashrc

Ngoài ra, bạn cũng có thể tạo một tệp tập lệnh như /usr/local/bin/_với nội dung sau để đạt được điều tương tự mà không cần chức năng Bash và cho tất cả người dùng:

#!/bin/bash
sed "s/^/\t/" <($*)

Bạn phải làm cho tập lệnh có thể thực thi được sau khi lưu tệp bằng

sudo chmod +x /usr/local/bin/_

5

Với echocụ thể, bạn có thể có nó giải thích thoát xuyệc ngược như \t(một dừng tab ) với -ecông tắc:

echo -e "\tHello World"

Nhưng nó khó có thể khả thi (hoặc có thể là có thể) để sửa đổi đầu ra của mọi lệnh theo cách đó. Nếu dễ đọc là mục tiêu của bạn, bạn có thể muốn xem xét tùy chỉnh giao diện (ví dụ: tô màu) của dấu nhắc lệnh của bạn, như được hiển thị ở đây:

Bạn có thể tùy chỉnh lời nhắc của mình bằng cách thay đổi nội dung của biến môi trường PS1. Bạn có thể thấy một ví dụ nhỏ về cách làm điều đó trong bài đăng trên blog , ảnh chụp màn hình ở trên là từ. Cách sử dụng chi tiết các chuỗi thoát ANSI, cách sử dụng các công cụ thoải mái hơn, làm thế nào để thay đổi được áp dụng theo mặc định trong các thiết bị đầu cuối mới, v.v ... nằm ngoài phạm vi của câu trả lời này. Nhưng nếu bạn quyết định sử dụng kỹ thuật đó, có rất nhiều hướng dẫn và thông tin thêm trên web.


Cảm ơn phản hồi, tuy nhiên tôi đã thay đổi PS1 theo ý thích của mình.
Alex Ng
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.