
次のようにして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
誰もがそれを書いた人がアンチ機能を生成するためにコード(追加作業)を追加する必要があるため、これは驚くべきことだと思います。それとも、アプリケーションがmake
ttyのスイッチをオンにして、すべてが自動的にエスケープされるようにしますか?それでは、この動作を無視し、プログラムにmake
子プロセスデータを変換せずにttyに渡すように強制できますか?それとも、各プログラムは独自の方法でこの動作を制御しますか?
答え1
問題は、スクリプトがPOSIXではないことに依存していることです。bash
機能するがmake
使用中/bin/sh
シェルの場合(例:Debian)、次のような他のプログラムです。dash
(POSIX規格に準拠したシェル)
追加資料:
答え2
Thomasが答えで述べたように、使用されるシェルはmake
スクリプトを手動で実行するときに使用するシェルとは異なります。
通常、スクリプトが特定のシェルに固有の機能を使用している場合は、その特定のシェルをshebang行に配置する必要があります。
たとえば、
#!/bin/bash
echo -e "This is \033[0;31mRED\033[0m"
答え3
呼び出されるスクリプトは、組み込みファイルシステムではなくmake
ファイルシステムを使用する必要があります。echo
/bin/echo -e "\033...