echoの出力のフォント属性をzshまたはbashで変更することはできますか?
私が望むのは次のようなものです:
echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".
そのため、テキスト行内に「これはフォントです。通常、斜体、太字、小」です。
echoの出力のフォント属性をzshまたはbashで変更することはできますか?
私が望むのは次のようなものです:
echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".
そのため、テキスト行内に「これはフォントです。通常、斜体、太字、小」です。
回答:
すべてではありませんが、ほとんどのターミナルエミュレーターでは、異なるフォントサイズまたは異なるフォントを設定することはできず、色といくつかの属性(太字、下線付き、目立つ)のみを設定できます。
bash(またはzshまたはその他のシェル)では、ターミナルエスケープシーケンスを直接使用できます(いくつかのエキゾチックなシーケンスは別として、すべてのターミナルは最近xtermのリードに従います)。CSI
はESC [
、$'\e['
bash で書かれています。属性を変更するエスケープシーケンスはCSI Ps m
です。
echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'
Zshには便利な機能があります。
autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e'$color[underline]munderlined
これらの色の定義をスクリプトまたはソースファイルに含めることができます。このように見えるかもしれません。
#!/bin/bash
PATH=/bin:/usr/bin:
NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'
echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."
tput sgr0
変更を呼び出すたびに、ANSIカラーコードをリセットする必要があることに注意してください。tput sgr0
リセットあなたはターミナルで行われたすべての変更。
フォントサイズや斜体の変更は、使用している端末に固有のものだと思います。
このガイドはbashプロンプトのカスタマイズに特化していますが、カラーコードの参考資料であり、何ができるかについてのアイデアを生成します。
レイアウトがの[0x1b]
前にある文字を処理できないかのよう[
です。
最初の行は太字になります:
echo -e "\x1b[1m bold"
echo -e "\x1b[30m black"
echo -e "\x1b[31m red"
echo -e "\x1b[32m green"
echo -e "\x1b[33m yellow"
echo -e "\x1b[34m blue"
echo -e "\x1b[35m mag"
echo -e "\x1b[36m cyan"
echo -e "\x1b[37m white"
一般的なタイプについては、私は知っている
echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"
そしてコメントから、マナトワークとジプシー宇宙飛行士に感謝します:
echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"
io-stdとnormalの違いがわかりません。
シェルにイタリック体や小さなものは見ていません。
(manatworkのおかげで)Bashで Ctrl + を入力する v ESC と、として表示され^[
ます。これは、ANSIシーケンス全体が^[[1m bold
または^[[1mbold
(「太字」の前の空白を避けるため)のように見えることを意味します。
多くのエディターは(char)0x1bに問題があります。代替手段:どこかからコピー/貼り付けするか、使用する
echo -e "\x1b[1m bold"
bashまたは16進エディタで。
\e[4m
下線、\e[5m
点滅、\e[7m
反転。
echo -e "\x1b[3m italic"
ここに:
http://en.wikipedia.org/wiki/ANSI_escape_code
(注:それらの多くは通常動作しませんが、これらのほとんどはこのようにマークされています。)
私は端末でゲームを作成しており、上記のリンクに大きく依存しています。カーソルの非表示/再表示、色(30代)、「太字」(淡色)、暗色、下線付き、斜体、背景色(30代ではなく40代)などの方法も説明します。カーソルの位置も変更できます(これは非常に便利です。たとえば、"\x1B[1A"
カーソルを1行上に"\x1B[0;0H"
移動し、カーソルを行0、列0に移動し"\x1B[2J"
、画面を"\x1B[2K"
クリアし、行をクリアします。
人々が言ったようにあなたの目的のために:
echo -e "\x1b[30;44m black with blue background \x1b[m"
echo -e "\x1b[31;42m red with green background \x1b[m"
echo -e "\x1b[32;40m green with black background \x1b[m"
echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"
注:あなたは、必要-e
に
echo **-e** "\x1b[35;1m Light purple \x1b[m"
または、単一引用符を使用する必要があります。入力man echo
して理由を確認します(通常、二重引用符は印刷時に苦労します。展開しないものが必要な場合、またはANSIエスケープシーケンスが必要な場合は、簡単に引用符を使用します。--eを忘れた場合、 " box with numbers and letters
[35; 1m")が返されます)。
表示されるたびに(または)にCSI
置き換えてください。私はもっと標準的だと思いますが、それらの違いが何なのか本当に分かりません。"\x1b["
"\e["
"\u1b["
"\x1b["
\e
未満サポートされている\x1b
、私が発見しました。行うのに最適なことは、(これはbashにあります)のいずれesc=$'\e'
かでesc=$'\x1b'
あり、次に"${esc}[34;1m"
(たとえば、明るい青に)使用します。実際のbashプロンプト文字列については、ここに半複雑な例(github.com/dylnmc/ps1porn/blob/master/powerline.sh)があります;)レポジトリの名前はご容赦ください-freenodeのチャンネルの人々に感謝できます#そのためのarchlinux-offtopic。
esc=$'\e'
これを行う理由は、これによりbashがその場でansi-escapeキャラクターを作成できるようになり、いくつかの方法でそれから利益を得られるからです。時々、実際には(githubリンクで示されているように)、色を適切に表示するためにこのメソッドを使用する必要があります。shシェルと同様に古いバージョンのbashでは、このメソッドを使用して色を表示する必要があります(ただし、必要ではありません)。