बैश कमांड प्रतिस्थापन उम्मीद के मुताबिक काम नहीं कर रहा


4

मैं फ़ाइल की अंतिम कुछ पंक्तियों को देखना चाहता हूं, लेकिन मैं चाहता हूं कि कॉलम संरेखित हों। मूल रूप से, मैं वर्डवैप को अक्षम करना चाहता हूं।

यह सीधा है:

tail $FILE | cut -c -80

लेकिन मैं अन्य उपयोगकर्ताओं के लिए अपनी स्क्रिप्ट को सामान्य बनाने की कोशिश कर रहा हूं, और मैं वास्तविक टर्मिनल चौड़ाई में कटौती करना चाहता हूं, जिसे मैं प्राप्त कर सकता हूं:

stty size | cut -d" " -f2

तो मैं कल्पना करता हूं कि मैं बस कर सकता हूं

tail $FILE | cut -c -`stty size | cut -d" " -f2`

लेकिन यह काम नहीं करता है:

stty: standard input: Invalid argument
cut: invalid range with no endpoint: -
Try `cut --help' for more information.

(समान परिणाम 'नए' $ () विस्तार के साथ)

अब, अगर मैं इसे प्रतिध्वनित करता हूं, तो यह ठीक लगता है:

echo cut -c -`stty size | cut -d" " -f2`
cut -c -103

क्या मैं सिर्फ एक पलायन चार को याद कर रहा हूं? या यह किसी भी तरह संभव नहीं है?

धन्यवाद।

जवाबों:


3

कारण यह है कि काम नहीं करता है क्योंकि stty एक पाइप के भीतर निष्पादित किया जाता है। इसलिए यह अंतर्निहित टर्मिनल को "देखना" नहीं है। आपकी स्क्रिप्ट में आप टर्मिनल की चौड़ाई को चर में स्टोर कर सकते हैं

size=`stty size | cut -d" " -f2`

और फिर अगले का उपयोग करें:

tail $FILE | cut -c -$size

1

बैश स्क्रीन की चौड़ाई को बनाए रखता है COLUMNS चर, जिसे आप एक पाइपलाइन में उपयोग कर सकते हैं:

tail $FILE | cut -c -$COLUMNS
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.