Pertanyaan Cara menyisipkan tab sebelum baris output dari perintah yang dieksekusi


Hanya pertanyaan singkat. Apakah mungkin untuk melakukan tab output pada Ubuntu 16.04 LTS? Saya telah membuat dua gambar di bawah ini untuk mencoba dan mengilustrasikan apa yang saya maksudkan dengan ini.

img1

img2


13
2017-07-17 14:36


asal


Apakah tidak apa-apa jika Anda harus melakukan pipe output perintah melalui perintah lain seperti YOUR COMMAND | indent atau jika Anda harus mengetikkan perintah lain di depannya (bahkan mungkin hanya garis bawah) _ YOUR COMMAND? - Byte Commander
@ByteCommander Saya telah mempertimbangkan itu, namun saya melakukan ini untuk kemudahan penggunaan dan untuk membuat keluaran konsol lebih mudah dibaca. Jadi saya tidak berpikir bahwa semua perintah saya adalah solusinya. Terima kasih atas tanggapannya dan sunting! - Alex Ng
[Tolong jangan posting screeshots output teks. ] (meta.askubuntu.com/q/8713/85695) - terdon♦


Jawaban:


Anda dapat melakukan sesuatu seperti ini - dengan deskriptor file:

  1. simpan deskriptor keluaran saat ini sehingga kami dapat memulihkannya nanti

    exec 3>&1
    
  2. mengarahkan aliran output ke a substitusi proses yang menyisipkan tab - misalnya

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

Dari titik ini, setiap proses yang menulis ke output standar akan memiliki output yang 'disaring' melalui paste perintah untuk memasukkan tab di awal.

  1. Setelah selesai, Anda dapat melanjutkan perilaku normal dengan memulihkan pendata file yang disimpan dan menutup yang sementara

    exec 1>&3 3>&-
    

13
2017-07-17 16:19



Saya ingin mengucapkan terima kasih atas tanggapannya. Ini adalah yang paling dekat saya datang ke solusi meskipun itu tidak sempurna. - Alex Ng
@AlexNg terima kasih atas upvote - dengan cara apa secara khusus tidak melakukan apa yang Anda minta? jika Anda memberi tahu saya, saya akan mencoba memperbaikinya - steeldriver
Untuk memberikan beberapa contoh: Setelah memasukkan perintah Anda, beberapa perintah berfungsi seperti yang dimaksudkan 'php -v', 'hostname', dan lainnya. Namun, ketika menggunakan perintah seperti 'echo Hello World', output ditampilkan sejajar dengan input dan juga mempengaruhi tampilan visual masukan saat memasukkan perintah berikutnya. Beberapa perintah lain juga tidak dipengaruhi oleh proses tabbing, seperti ketika memasukkan perintah yang tidak valid seperti 'asdasd'. - Alex Ng
Akhirnya, itu tidak benar menampilkan output yang berubah (tidak yakin bagaimana menggambarkan ini dengan benar, permintaan maaf). Misalnya, jika perintah 'apt-get update' digunakan, ada perbedaan nyata ketika membandingkannya dengan konsol tanpa proses tabbing. - Alex Ng
Masalahnya adalah bahwa pendekatan ini hanya menangani STDOUT (aliran 1), tetapi tidak STDERR (aliran 2). Itu juga merusak output dari program yang digunakan less atau alat serupa untuk memungkinkan bergulirnya output, seperti misalnya man. - Byte Commander


Saya memahami jawaban ini tidak optimal untuk Anda, tetapi Anda dapat membuat fungsi Bash dengan nama yang sederhana _ (atau apa pun yang belum digunakan) yang menjalankan perintah yang didapatkannya sebagai argumen dan mengindentasikan semua outputnya dengan tab.

Sebuah contoh:

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

Kode fungsi ini hanya akan menjadi ini:

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

Anda dapat menambahkannya ke Anda ~/.bashrc file sehingga akan tersedia di semua sesi Bash pengguna Anda dengan menjalankan:

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

Jika Anda ingin membuatnya tersedia untuk semua pengguna, tambahkan ke /etc/bash.bashrc sebagai gantinya (membutuhkan hak admin):

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

Atau Anda juga bisa membuat file skrip seperti /usr/local/bin/_ dengan konten berikut untuk mencapai hal yang sama tanpa fungsi Bash dan untuk semua pengguna:

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

Anda harus membuat skrip dieksekusi setelah menyimpan file menggunakan

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

7
2017-07-17 15:00





Dengan echo secara khusus, Anda dapat menafsirkan backslash escapes seperti \t (Sebuah tab berhenti) dengan -e beralih:

echo -e "\tHello World"

Tapi itu hampir tidak mungkin (atau mungkin mungkin) untuk memodifikasi output dari setiap perintah dengan cara itu. Jika kemudahan membaca adalah tujuan Anda, Anda mungkin ingin melihat menyesuaikan tampilan (misalnya pewarnaan) dari command prompt Anda, seperti yang ditunjukkan di sini:

Anda dapat menyesuaikan prompt Anda dengan mengubah konten variabel lingkungan PS1. Anda dapat melihat contoh kecil tentang cara melakukannya di posting blog screenshot di atas adalah dari. Cara menggunakan urutan escape ANSI yang disebut secara rinci, cara menggunakan alat yang lebih nyaman, bagaimana perubahan yang diterapkan secara default di terminal baru, dll. Berada di luar lingkup jawaban ini. Tetapi jika Anda memutuskan untuk menggunakan teknik itu, ada banyak tutorial dan informasi lebih lanjut seputar web.


5
2017-07-17 15:07



Terima kasih atas tanggapannya, namun saya sudah mengubah PS1 sesuai dengan keinginan saya. - Alex Ng