LinuxMint 17.2、カーネル 4.4.0-97-generic を使用しています。次の内容を含む小さな TestEcho.sh スクリプトを作成しました。
#!/bin/bash
echo -e "\e[1;31m Text in Color \e[0m\n"
for code in {33..43}; do echo -e "\e[38;05;${code}m $code: Text in Color"; done ; echo "";
このecho -e
コマンドをコマンド ラインで実行すると、期待どおりの出力が得られます。つまり、エスケープ コードを解釈し、テキストをカラーで表示します。
.sh スクリプト内の同じコマンドは、オプションを無視し、リテラル テキストとして表示されるようecho
です。さらに、for ループも壊れているようです。これは、 によって発生しますか? さらに重要なのは、スクリプトを修正する方法です。-e
-e
echo -e
答え(George Vasiliouに感謝): スクリプトをbash
次のように実行します。sh
$ bash ~/Download/TestEcho.sh
答え1
bash と sh は異なる種類のシェルです。bash は最新で、sh よりもスマートです。スクリプトでは、シェル#!/bin/bash
を使用して実行されるという意味で と記述しますbash
。ただし、 を使用すると、シェルsh ~/Download/TestEcho.sh
を使用して実行されますsh
。