シェルスクリプトのみを使用してLinuxでウィンドウのタイトルを取得するには?

シェルスクリプトのみを使用してLinuxでウィンドウのタイトルを取得するには?

ボックスにscreenやxprocなどのツールをインストールすることはできません。タイトルを変更する必要はなく、ウィンドウのタイトル名を見つけるだけです。

echo -e "\033]0;[title]\07";私が知るようにタイトルを修正します。しかし、既存のヘッダ名を知りたいです。

ベストアンサー1

以下を試してください。しかし、互換性は非常に制限されています。以下の注意事項を参照してください。

get_title(){(
        set -e
        ss=`stty -g`; trap 'exit 11' INT QUIT TERM; trap 'stty "$ss"' EXIT
        e=`printf '\033'`; st=`printf '\234'`; t=
        stty -echo -icanon min 0 time "${2:-2}"
        printf "${1:-\033[21t}" > "`tty`"
        while c=`dd bs=1 count=1 2>/dev/null` && [ "$c" ]; do
                t="$t$c"
                case "$t" in
                $e*$e\\|$e*$st)
                        t=${t%$e\\}; t=${t%$st}; printf '%s\n' "${t#$e\][lL]}";
                        exit 0;;
                $e*);;
                *) break;;
                esac
        done
        printf %s "$t"; exit 1
)}

例:

$ get_title
$ title=`get_title`

またはスクリプトの標準入力が端末でない場合:

$ title=`get_title </dev/tty`

stty+ kludgeは、dd端末が応答としてエスケープされたエントリを報告しない場合、スクリプトがブロックされないようにします\e[21t。この(またはより良い)アプローチは、他の制御シーケンス(たとえば、カーソル位置の取得)と組み合わせて使用​​することもできます。

メモ:

エスケープは「安全でない」と見なされるため、\e[21tこれを機能させるには追加の設定が必要です。

のためxtermecho '*.vt100.allowWindowOps: true' | xrdb -override

のためurxvtecho 'Rxvt.insecure: true' | xrdb -override

そうだろうまったく動作しませんgnome-terminal、、などのvteベースの端末で報告されているようmate-terminalxfce4-terminal徐々に進む(「ターミナル」)または応答のヘッダー。

mlterm特別なものは必要ありませんが、以前にヘッダが設定されていない場合\e]2;TITLE\a(エラーは安定現在のリソースから)。

screen-tC-a A実行中のウィンドウのタイトルではなく、独自のウィンドウタイトル(オプションまたはコマンドを使用して設定されたタイトル)を報告します。

ブロックされており、サポートされていませんtmux

おすすめ記事