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


16

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".

そのため、テキスト行内に「これはフォントです。通常、斜体太字」です。


これは、使用されているシェルよりも、問題のターミナルエミュレータに関係しています。 この質問スレッドにはいくつかの貴重なポインターが含まれていると思います
-sr_

通常、フォントサイズは変更できません。あなたが通常できる唯一のことは、色を変更することであり、時には太字/下線付きの属性を変更することです。このために、ANSIエスケープシーケンスを使用できます。例として、bashguru.com / 2010/01 / shell-colors-colorizing-shell-scripts.htmlを参照してください。
ジョフェル

回答:


15

すべてではありませんが、ほとんどのターミナルエミュレーターでは、異なるフォントサイズまたは異なるフォントを設定することはできず、色といくつかの属性(太字、下線付き、目立つ)のみを設定できます。

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

16

これらの色の定義をスクリプトまたはソースファイルに含めることができます。このように見えるかもしれません。

#!/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プロンプトのカスタマイズに特化していますが、カラーコードの参考資料であり、何ができるかについてのアイデアを生成します。


5

レイアウトがの[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進エディタで。


1
エスケープ文字入力できます:Ctrl + V、Esc。(「^ [」と表示されます。これは、ANSIシーケンス全体が「^ [[1mbold」のように見えることを意味します。)
manatwork

1
言及する属性は他にもあります:\e[4m下線、\e[5m点滅、\e[7m反転。
マナトワーク

@manatwork:それらを追加しました。
ユーザー不明

@userunknown助けてくれて、コードをいじってくれてありがとう、イタリック体はecho -e "\x1b[3m italic"
-GypsyCosmonaut

0

ここに:

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["


余分な文字で文字列を
乱雑に

@clearlightどういう意味かわかりません。「use \ e」と言うつもりだったのではないかと思います。しかし、\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では、このメソッドを使用して色を表示する必要があります(ただし、必要ではありません)。
ディラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.