निष्पादित कमांड से आउटपुट लाइनों से पहले टैब कैसे डालें


16

बस एक त्वरित प्रश्न। क्या उबंटू 16.04 एलटीएस पर आउटपुट टैब करना संभव है? मैंने कोशिश करने के लिए नीचे दिए गए दो चित्र बनाए हैं और मैं इसका मतलब बताता हूं।

img1

img2


1
क्या यह ठीक होगा यदि आपको कमांड आउटपुट को किसी अन्य कमांड के माध्यम से पाइप करना होगा जैसे कि YOUR COMMAND | indentया यदि आपको इसके सामने एक और कमांड टाइप करना है (जैसे कि केवल एक अंडरस्कोर हो सकता है) _ YOUR COMMAND?
बाइट कमांडर

1
@ByteCommander मैंने माना है कि, हालांकि मैं उपयोग में आसानी के लिए और कंसोल आउटपुट को पढ़ने में आसान बनाने के लिए कर रहा हूं। इसलिए मुझे नहीं लगता कि मेरी सभी आज्ञाओं को पूरा करना ही समाधान है। प्रतिक्रिया के लिए धन्यवाद और यद्यपि संपादित करें!
एलेक्स एनजी

1
[कृपया टेक्स्ट आउटपुट के स्क्रूशॉट पोस्ट न करें। ] ( meta.askubuntu.com/q/8713/85695 )
टेराडॉन

जवाबों:


15

आप इस तरह से कुछ कर सकते हैं - फाइल डिस्क्रिप्टर के साथ:

  1. वर्तमान आउटपुट डिस्क्रिप्टर को सहेजें ताकि हम इसे बाद में पुनर्स्थापित कर सकें

    exec 3>&1
  2. उदाहरण के लिए, टैब सम्मिलित करने वाली प्रक्रिया प्रतिस्थापन के लिए आउटपुट स्ट्रीम को पुनर्निर्देशित करें

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

इस बिंदु से, मानक आउटपुट को लिखने वाली किसी भी प्रक्रिया pasteमें प्रारंभ में टैब सम्मिलित करने के लिए कमांड के माध्यम से उस आउटपुट को 'फ़िल्टर्ड' किया जाएगा ।

  1. जब आप कर लें, तो आप सहेजे गए फ़ाइल डिस्क्रिप्टर को पुनर्स्थापित करके और अस्थायी एक को बंद करके सामान्य व्यवहार को फिर से शुरू कर सकते हैं

    exec 1>&3 3>&-

मैं प्रतिक्रिया के लिए धन्यवाद देना चाहूंगा। यह निकटतम है मैं एक समाधान के लिए आया हूँ, भले ही यह सही नहीं है।
एलेक्स एनजी

@AlexNg upvote के लिए धन्यवाद - किस तरह से विशेष रूप से वह नहीं करता है जो आपने पूछा था? अगर आप मुझे बताएंगे कि मैं इसे बेहतर बनाने की कोशिश
करूंगा

कुछ उदाहरण देने के लिए: अपने आदेशों को इनपुट करने के बाद, कुछ कमांड जैसे कि 'php -v', 'hostname' और अन्य के रूप में काम करते हैं। हालाँकि, 'इको हेलो वर्ल्ड' जैसी कमांड का उपयोग करते समय, आउटपुट को इनपुट के साथ इनलाइन प्रदर्शित किया जाता है और यह अगले कमांड को इनपुट करते समय इनपुट दृश्य उपस्थिति पर भी प्रतिकूल प्रभाव डालता है। कुछ अन्य आदेश भी टैबिंग प्रक्रिया से प्रभावित नहीं होते हैं, जैसे कि एक अमान्य कमांड को इनपुट करते समय जैसे कि 'asdasd'।
एलेक्स एनजी

अंत में, यह आउटपुट को सही ढंग से प्रदर्शित नहीं करता है जो परिवर्तन करता है (सुनिश्चित नहीं है कि यह कैसे ठीक से वर्णन करें, माफी)। उदाहरण के लिए, यदि कमांड 'एप्ट-गेट अपडेट' का उपयोग किया जाता है, तो टैबिंग प्रक्रिया के बिना कंसोल से तुलना करते समय ध्यान देने योग्य अंतर होते हैं।
एलेक्स एनजी

समस्या यह है कि यह दृष्टिकोण केवल STDOUT (धारा 1) को संभालता है, लेकिन STDERR (धारा 2) को नहीं। यह उन प्रोग्रामों के आउटपुट को भी तोड़ता है जो आउटपुट lessया स्क्रॉल करने की अनुमति देने के लिए इसी तरह के टूल का उपयोग करते हैं, जैसे कि man
बाइट कमांडर

9

मैं समझता हूं कि यह उत्तर आपके लिए इष्टतम नहीं है, लेकिन आप साधारण नाम _(या कुछ और जो अभी तक उपयोग नहीं किया गया है) के साथ बैश फ़ंक्शन कर सकता है, जो कमांड को तर्क के रूप में चलाता है और टैब के साथ इसके सभी आउटपुट को इंडेंट करता है।

एक उदाहरण:

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

इस फ़ंक्शन का कोड केवल यही होगा:

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

आप इसे अपनी ~/.bashrcफ़ाइल में जोड़ सकते हैं ताकि यह आपके उपयोगकर्ता के सभी बैश सत्रों में उपलब्ध हो जाए:

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

यदि आप इसे सभी उपयोगकर्ताओं के लिए उपलब्ध कराना चाहते हैं, तो /etc/bash.bashrcइसके बजाय इसे जोड़ें (व्यवस्थापक अधिकारों की आवश्यकता है):

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

वैकल्पिक रूप से आप /usr/local/bin/_बश फ़ंक्शन के बिना और सभी उपयोगकर्ताओं के लिए समान प्राप्त करने के लिए निम्न सामग्री के साथ एक स्क्रिप्ट फ़ाइल बना सकते हैं:

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

फ़ाइल का उपयोग करके सहेजने के बाद आपको स्क्रिप्ट को निष्पादन योग्य बनाना होगा

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

5

साथ echoविशेष रूप से, आप यह बैकस्लैश पलायन की व्याख्या कर सकते हैं \t(एक टैब बंद के साथ) -eस्विच:

echo -e "\tHello World"

लेकिन इस तरह से हर कमांड के आउटपुट को संशोधित करना शायद ही संभव होगा (या संभव है)। यदि पढ़ने में आसानी आपका लक्ष्य है, तो आप अपने कमांड प्रॉम्प्ट के रूप (जैसे रंग) को अनुकूलित करना चाह सकते हैं, जैसे यहाँ दिखाया गया है:

आप पर्यावरण चर की सामग्री को बदलकर अपने संकेत को अनुकूलित कर सकते हैं PS1। आप इस बात का एक छोटा सा उदाहरण देख सकते हैं कि ब्लॉग पोस्ट में उपरोक्त स्क्रीनशॉट से कैसे किया जाता है। उन तथाकथित एएनएसआई से बचने वाले दृश्यों का विस्तार से उपयोग कैसे करें, उन उपकरणों का उपयोग कैसे करें जो अधिक आरामदायक हैं, नए टर्मिनलों में डिफ़ॉल्ट रूप से कैसे लागू होते हैं आदि इस उत्तर के दायरे से परे हैं। लेकिन अगर आप उस तकनीक का उपयोग करने का निर्णय लेते हैं, तो वेब पर बहुत सारे ट्यूटोरियल और आगे की जानकारी है।


प्रतिक्रिया के लिए धन्यवाद, हालांकि मैंने पहले ही PS1 को अपनी पसंद के हिसाब से बदल दिया है।
एलेक्स एनजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.