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

Я просто скучаю по спасательному персонажу? Или это как-то просто невозможно?

Благодарю.

2 ответа2

3

Причина, по которой это не работает, заключается в том, что stty выполняется внутри канала. Поэтому он не "видит" базовый терминал. В вашем скрипте вы можете хранить ширину терминала в переменной типа

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

а затем использовать это следующее:

tail $FILE | cut -c -$size
1

Bash поддерживает ширину экрана в COLUMNS , которую вы можете использовать в конвейере:

tail $FILE | cut -c -$COLUMNS

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .