端末の現在のタブ幅をどのように知ることができますか?

端末の現在のタブ幅をどのように知ることができますか?

わかりましたタブコマンドを使用して端末のタブ幅を設定できますが、端末の現在のタブ幅をどのように知ることができますか(タブ間隔が同じであると仮定)。関連情報が見つかりません。タブマニュアル、私は何が欠けていませんか?

答え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"

ところで本当にトマトトマトですね。

関連情報