web-dev-qa-db-ja.com

エコーコマンドでフォントを変更する

Zshまたはbashのいずれかでechoの出力のフォント属性を変更することは可能ですか?

私が望むのは、次のようなものです:

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のリードに従います)。 CSIESC [$'\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プロンプトのカスタマイズに固有のものですが、カラーコードのリファレンスとして役立ち、何ができるかについていくつかのアイデアを生み出しています。

16
George M

レイアウトが[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"

そしてコメントから、manatworkとGypsyCosmonautに感謝します:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

io-stdとnormalの違いがわかりません。

シェルでイタリックや小さい文字を見たことはありません。

あなたはそれらを入力することができます(manatworkのおかげでも) CtrlvESC Bashでは、^[として表示されます。つまり、ANSIシーケンス全体は^[[1m boldまたは^[[1mboldのようになります(「太字」の前の空白を避けるため)。

多くのエディターは(char)0x1bに問題があります。代替:どこかからコピー/貼り付けするか、使用

echo -e "\x1b[1m bold"

bash、または16進エディター。

5
user unknown

ここに:

http://en.wikipedia.org/wiki/ANSI_escape_code

(注:それらの多くは通常は機能しませんが、これらのほとんどはこのようにマークされています。)

私は端末でゲームを作成しており、上記のリンクに大きく依存しています。カーソルの非表示/再表示、色(30's)、「太字」(明るい)、濃い、下線付き、イタリック、背景色(30'sではなく40's)などを作成する方法も示しています。カーソルの位置(これは非常に役立ちます-たとえば、"\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 in

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["私はもっと標準的だと思いますが、それらの違いが何であるかは本当にわかりません。

0
Dylan