4

I'd like to view the last few lines of a file, but I want the columns aligned. Basically, I want to disable wordwrap.

This is straightforward with:

tail $FILE | cut -c -80 

But I'm trying to generalize my script for other users, and I'd like to cut to the actual terminal width, which I can get with:

stty size | cut -d" " -f2 

So I would imagine that I could just

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

but it doesn't work:

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

(Same results with the 'new' $() expansion.)

Now, if I echo it, it seems fine:

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

Am I just missing an escape char? Or is this somehow just not possible?

Thanks.

2 Answers 2

3

The reason that it doesn't work is because stty is executed within a pipe. Therefore it doesn't "see" the underlying terminal. In your script you could store the terminal width in a variable like

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

and then use that next:

tail $FILE | cut -c -$size 
0
1

Bash maintains the screen width in the COLUMNS variable, which you can use in a pipeline:

tail $FILE | cut -c -$COLUMNS 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.