터미널의 현재 탭 너비를 어떻게 알 수 있나요?

터미널의 현재 탭 너비를 어떻게 알 수 있나요?

알아요명령을 사용하여 터미널의 탭 너비를 설정할 수 있지만 터미널의 현재 탭 너비를 어떻게 알 수 있습니까(탭 간격이 동일하다고 가정)? 관련 정보를 찾을 수 없습니다.탭 매뉴얼, 내가 뭐 놓친 거 없니?

답변1

tab-width.sh다음과 같은 스크립트를 사용할 수 있습니다 .

#!/usr/bin/env bash

echo -ne 'a\tb'  &&
    echo -ne "\033[6n"            # ask the terminal for the position
read -rs -d\[ _                   # discard the first part of the response
read -rs -dR foo                  # store the position in bash variable 'foo'
foo=$(cut -d";" -f2 <<< "$foo")   # discard row number
printf "\r\e[0K%d\n" $((foo - 2)) # subtract 2 for 'a' and 'b'

에서 적응StackOverflow에 대한 답변입니다.. 예:

$ tabs 10

$ ./tab-width.sh
10
$ tabs 20

$ ./tab-width.sh
20
$ tabs 3

$ ./tab-width.sh
3

이 스크립트는 철저하게 테스트되지 않았으므로 주의하시기 바랍니다. 1과 2는 동일한 값을 반환하지만 대부분의 경우 잘 작동하는 것 같습니다.

$ tabs 1

$ ./tab-width.sh
2
$ tabs 2

$ ./tab-width.sh
2

echo -e 'a\tb'그러나 두 경우 모두 반환된 출력도 동일하다는 점에 유의해야 합니다 .

답변2

편집하다:다음은 실제로 내가 생각한 대로 작동하지 않습니다. 댓글에서 이 점을 지적해 주신 @4wk_에게 감사드립니다 :)


나는 사용해왔다

echo $'\t' | wc -L

# typical output:
8

이 목적을 위해.

  • echo $'\t'= 단일 탭 문자를 인쇄합니다.
  • wc="단어 카운터" 프로그램
  • -L= 일명 --max-line-length; wc스위치에 선의 길이를 계산하라고 지시합니다.탭이 올바르게 확장됩니다.

나는 이 접근 방식이 다른 TTY와 셸 간에 매우 이식성이 높다는 것을 알았습니다. 이식성을 향상시키기 위해 추가할 유일한 것은 에코를 다음과 같이 변경하는 것입니다.

echo -e "\t"

그런데 정말 토마토 토마토네요.

관련 정보