हर कमांड का ऑल्टर आउटपुट


1

मैं जानना चाहता हूं कि क्या टर्मिनल में निष्पादित हर कमांड के आउटपुट को बदलने का कोई तरीका है। उद्देश्य यह है कि आउटपुट को मेरे मार्कटाउन के लिए तैयार किया जाए।

जैसे

ls -la .*z
#>-rw-r--r--  1 hologos  staff   3580 26 zář 14:22 .zconfig
#>-rw-------  1 hologos  staff  28927 17 říj 15:59 .zhistory
#>-rw-r--r--  1 hologos  staff   5600 30 zář 08:03 .zshrc

"# & Gt;" मैं यही चाहता हूं कि आउटपुट की हर लाइन इसी से शुरू होती है। मैं मुख्य रूप से zsh का उपयोग करता हूं।

धन्यवाद।

जवाबों:


2

मैं कुछ करूँगा

  command | sed -e 's/^/line-prefix /'

उदाहरण

$ ls -la m* | sed -e 's/^/#> /'
#> -rwxr-xr-x 1 root root 76080 Aug 11  2011 mailstats
#> -r-xr-xr-x 1 root root 92824 Aug 11  2011 makemap
#> -rwxr-xr-- 1 root root 12389 Jul 22  2011 makewhatis
#> -rwxr-xr-x 1 root root 11520 Mar  6  2011 matchpathcon
#> -rwxr-xr-x 1 root root 56600 May 18  2011 mcelog
#> lrwxrwxrwx 1 root root    15 Mar 18  2011 mkdict -> cracklib-format
#> -rwxr-xr-x 1 root root  9600 Jul 22  2011 mklost+found
#> -rwxr-xr-x 1 root root 10176 Jan  6  2007 mksock
#> -rwxr-xr-x 1 root root  4409 Jan  7  2007 modeline2fb
#> -rwxr-xr-x 1 root root 23787 Jul 22  2011 mountstats
#> -rwxr-xr-x 1 root root 58032 Jan  7  2007 mtr

आप इसे एक शेल में भी लागू कर सकते हैं ताकि यह स्वचालित रूप से किया जाए

$ ksh | sed -e 's/^/#> /'
$ ls m*
#> mailstats
#> makemap
#> makewhatis
#> matchpathcon
#> mcelog
#> mkdict
#> mklost+found
#> mksock
#> modeline2fb
#> mountstats
#> mtr

वहाँ शायद कुछ कमियां हैं / gotchas, इस के साथ ध्यान रखना।


एक अलग दृष्टिकोण को चलाना है script (देख man script ) और फिर अपने पसंदीदा संपादक (या एक छोटी सी पर्ल / awk / etc स्क्रिप्ट) का उपयोग करके इसे मार्कडाउन-फ्रेंडली बनाएं - vim में मैं बस कुछ ऐसा करूँगा :%s/^/#> / एक बार में सभी लाइनों को ठीक करने के लिए। फिर मैं मार्कडाउन हेडर आदि लगाऊंगा।


यह ठीक वैसा ही है जैसा मुझे चाहिए। मैं सभी प्रकार के कमांड निष्पादित करते हुए इसका उपयोग करने की योजना बना रहा हूं। क्या ऐसी कोई कमियां / गोटे हैं जिनके बारे में आप सोच सकते हैं
Hologos

@ होलोज: कुछ कमांड अलग तरीके से व्यवहार करते हैं अगर STDOUT एक TTY से जुड़े होने के बजाय एक प्रक्रिया में ले जाए। इसके अलावा शेल प्रॉम्प्ट के साथ कुछ व्यापकता है जो किसी भी नुकसान का कारण नहीं लगती है, लेकिन जो डिस्कनेक्ट हो रही है। वहाँ शायद अधिक है।
RedGrittyBrick

1
IFS=$'\n';for line in `ls -la .*z`;do echo "#>$line";done

यह कमांड आउटपुट के माध्यम से लूप करेगा ( ls -la .*z ) और स्क्रीन पर परिणाम को दिखा कर प्रदर्शित करें #> हर लाइन के लिए

पुनश्च:

IFS हिस्सा परिसीमन करने के लिए है नई पंक्ति के बजाय खाली स्थान के


धन्यवाद, क्या ऐसा कोई तरीका है जो मुझे यह लिखना नहीं चाहिए? कुछ इस तरह cd() { builtin cd "$@" && ll; } लेकिन हर कमांड या किसी प्रकार के अन्य के लिए जो पृष्ठभूमि में हर कमांड को बदल देगा?
Hologos

आप इसका उपयोग करने से क्यों बचेंगे for पाश?
w17t

या कुछ पसंद है ls -la .z* लेकिन यह स्वतः ही इसका विस्तार करेगा ls -la .z* | my-program, जिसमें आपका कोड होगा।
Hologos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.