私はこれを持っています:
ql_gray='\033[1;30m'
ql_magenta='\033[1;35m'
ql_cyan='\033[1;36m'
ql_orange='\033[1;33m'
ql_green='\033[1;32m'
ql_no_color='\033[0m'
私は次のように使用します:
echo "${ql_magenta}quicklock: could not acquire lock with name '${qln}'${ql_no_color}."
しかし、私はそれを理解します:
\033[1;35mquicklock: could not acquire lock with name '/Users/me/.quicklock/locks/_oresoftware.lock'\033[0m.
制御文字を認識するには、いくつかのフラグを設定する必要がありますか?
エンドユーザーが制御文字を認識できることを確認できるフラグはありますか?認識されない場合は、上記の設定を次のように設定できます。
ql_gray=''
ql_magenta=''
ql_cyan=''
ql_orange=''
ql_green=''
ql_no_color=''
Bash バージョン 3 以降をサポートする必要があります。
答え1
これを行うポータブルな方法は、以下を使用することです。tput
:
ql_gray=$(tput setaf 7)
ql_magenta=$(tput setaf 5)
ql_cyan=$(tput setaf 6)
ql_orange=$(tput setaf 3)
ql_green=$(tput setaf 2)
ql_no_color=$(tput sgr0)
これは現在の端末設定を考慮します。公式カラーリストは次の場所に文書化されています。terminfo(5)
マンページしかし、実験が必要な場合があります。たとえば、上記のリストでは、7は正式に白(ただし、ほとんどの端末では明るい灰色で終わります)、3は正式に黄色です(ただし、ほとんどの端末では濃い黄色またはオレンジ色で表示されます)。TERM=dumb
色を呼び出す前に設定して色を無効にできますtput
。
答え2
bashに文字列のエスケープシーケンスを解釈させる必要があります。次のいずれかの方法を使用できます。
echo -e "${ql_gray}..."
printf "%b\n" "${ql_gray}..."
または、変数を設定するときに変数を評価します。
ql_gray=$'\033[1;30m'
それから:
echo "${ql_gray}..."
printf "%s\n" "${ql_gray}..."
答え3
このフラグを使用すると、使用するのではなく制御文字を認識しますecho
。echo -e
printf
うまくいくかもしれません。明らかにPOSIXです。