一部のプログラムはサブルーチンのTTY色を正しく渡しますが、他のプログラムがそうでないのはなぜですか?

一部のプログラムはサブルーチンのTTY色を正しく渡しますが、他のプログラムがそうでないのはなぜですか?

次のようにしてttyを色付けできます。

myscript.sh:

#!/bin/bash
echo -e "This is \033[0;31mRED\033[0m"

通常、他の「親」プログラムが子myscript.shプロセスとして実行されている場合は、カラーコードが正しく戻され、親プログラムを実行しているシェルは子プロセスの色を表示します。

何度も動作しません。 GNU Makeは反例です

ファイル生成:

foo:
    ./myscript.sh

私が実行すると、make foo出力は次のようになります

This is \033[0;31mRED\033[0m

何らかの理由でmake子プロセスの出力をエスケープする必要があるように感じます。

make誰もがそれを書いた人がアンチ機能を生成するためにコード(追加作業)を追加する必要があるため、これは驚くべきことだと思います。それとも、アプリケーションがmakettyのスイッチをオンにして、すべてが自動的にエスケープされるようにしますか?それでは、この動作を無視し、プログラムにmake子プロセスデータを変換せずにttyに渡すように強制できますか?それとも、各プログラムは独自の方法でこの動作を制御しますか?

ベストアンサー1

問題は、スクリプトがPOSIXではないことに依存していることです。bash機能するがmake使用中/bin/shシェルの場合(例:Debian)、次のような他のプログラムです。dash(POSIX規格に準拠したシェル)

追加資料:

おすすめ記事