現在の端末に対して特定の(名前付き)エスケープシーケンスを生成する方法は?

現在の端末に対して特定の(名前付き)エスケープシーケンスを生成する方法は?

最近、現在のtermcap / terminfo設定に応じて、端末制御コードを「正常に」出力できるトリックを見ましたが、見つかりませんでした。私が正しく覚えている場合は、次のことを行うことができます。

echo "$(some_command home)"

エコーされるのはエスケープシーケンスの実際のバイトであり、これによりカーソルが$TERM後ろに移動します。そのコマンドは何ですか?

ベストアンサー1

私が見るコマンドは、tput私の質問のように人々が使うことができます。

echo -n "$(tput home)"

もちろん、この特別な例は重複しています。tput独自のstdoutに書き込むパラメータとしてstdoutを実行するのは無駄です。echo文字列を生成する必要がある場合は、この方法がより適している可能性がありますecho -n "$(tput thing1)some text$(tput thing2)other text。しかし、@icarusが以下のコメントで指摘したように、これを行うと文字列が失われます。タイミングトリックを知ってくださいtput

したがって、可能な場合はいつでもユーティリティを直接呼び出すのが最善です。

tput clear
tput blink
echo "DANGER WILL ROBINSON"
tput bel
sleep 5
reset     # NOTE: this might be symlinked to tput also!

コア/組み込みツールではありませんが、ncursesの一部として提供されるため、広く使用する必要があります。私が一つ見つけた良い紹介/概要これはいくつかの背景情報を提供し、関連するコマンドも表示します。そしてこの点エクスポートできるすべての名前付き「機能」の便利なリストが含まれています。

おすすめ記事