Shell出力の色とコントロールを深く理解する


前言
lsコマンドを使ってファイルリストを一覧表示する場合、ファイルの種類によって異なる色で表示されます。このような色付きテキスト出力はどうやって実現されますか?答えは複雑ではありません。シェルでもCでも。
一、shellでの実現方法
まずshellの下で、どうやって実現しますか?echoコマンドで実現できます。以下の例を参照してください。

  echo -e "33[32mHello, world!"
端末でこのコマンドをノックしたら、システムが緑色で「ハロー、ワールド!」そればかりか、後の命令文も緑に変わった?焦らないでください。私の話を聞いてください。echoコマンド-eオプションの役割は、端末の反斜線変換子(すなわち)に対する解釈を活性化することである。引用符内33は、非通常の文字列をガイドするために使用され、ここでは出力属性をガイドする役割を果たし、後の[32 m]は前景色を緑色に設定し、アルファベットmは設定された属性カテゴリを表し、数字は属性値を表します。
設定は単独で使用できます。例えば、

  echo -e "33[0m"
このコマンドの役割は、属性がデフォルトの値に戻ることです。0 m設定項目は標準の値に戻ります。今あなたの端末は正常ですか?
これらを理解したら、残りは簡単です。このコマンドでは、テキストの前景色を設定するほか、多くのプロパティを設定できます。
下に他の設定項目が表示されます。

  33[0m       
  33[1m      
  33[4m    
  33[5m   
  33[7m   
  33[8m   
  33[30m   33[37m      
  33[40m   33[47m      
  33[nA     n  
  33[nB     n 
  33[nC     n 
  33[nD     n 
  33[y;xH      
  33[2J   
  33[K            
  33[s        
  33[u       
  33[?25l     
  33[?25h     
各数字の色は以下の通りです。
ワードの背景色の範囲:40----49
     40:黒
     41:深紅
     42:緑
     43:イエロー
     44:ブルー
     45:パープル
     46:深緑
     47:白
ワードの色:30--------39
     30:黒
     31:レッド 
     32:緑
     33:黄
     34:ブルー
     35:パープル
     36:濃緑 
     37:白
また、同じ種類の複数の設定項目を組み合わせることができます。中間はセミコロン(;)です。仕切りをする。
以下のとおりです

  echo -e "33[20;1H33[1;4;32mHello,world33[0m"
このコマンドは、まず33[20;1 Hは、カーソルを端末の20行第1列に移動し、その後の33[1]。4;32 mテキストの属性をハイライト、アンダースコア、そして色が緑色に設定し、ハロー、worldを出力します。最後の33[0 m]は終端属性をデフォルトに戻すと、コマンド完了後のコマンドプロンプトも見られなくなります。
以上の各種コマンドの組み合わせにより、端末への出力の複雑な制御が可能となります。
どのようにCプログラミングで実現しますか?
以上のShellでの実現方法を理解しました。Cでどのように実現するかについては簡単です。上の例を参照してください。

  int color = 32;

  printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);
この例は上のshellの最後の例と似ていますが、ここの色の値は変数カラーで指定されています。
三、連想
ここを見ると、他のプログラミング言語でも同様の方法で端末の出力制御が可能ではないかと思います。答えは肯定です。例えばpythonでは、以下のように出力できます。

  color=32

  print “33[20;1H33[1;4;%dHello, world.33[0m"%color
この例の効果は上のCの例と同じです。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです。もし疑問があれば、メッセージを残して交流してもいいです。