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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.