SSH経由でスクリプトを実行すると、エコーのカラーコードは機能しません。

SSH経由でスクリプトを実行すると、エコーのカラーコードは機能しません。

すべて。

次のサンプルコードがあります。

#!/bin/bash
echo "[\033[01;32m  green  \033[01;37m]"
echo "[\033[01;31m  red  \033[01;37m]"

このスクリプトをローカルで実行すると、正しい出力色が表示されます。

しかし、scpを介して別のホストにコピーして「ssh」を使用して実行すると、[Eメール保護]"sudo sh color-test.sh"" このスクリプトは色の代わりにコードを印刷します。

リモートでスクリプトを実行するときに注意する必要がありますか?

ベストアンサー1

行動

echo '\033'

実装および/または環境によって異なります。

UNIX準拠の実装では、ESC文字の後にNLが出力され、他の実装ではESC文字\033の後にNLが出力されます。-eこれらのエスケープシーケンスを拡張するためのいくつかのサポートオプションがあります。\033

スクリプトに#! /bin/bashshe-bangがありますが、スクリプトをで実行しているため、sh the-script代わりshに解釈されますbash

ほとんどのシステムでは、bash組み込み関数はecho基本的にシーケンスを拡張しません。これは、このオプションが有効または使用されている場合にのみ\x実行されます(オプションがすべて有効になっていない場合)。xpg_echo-expg_echoposix

shこれに関連して、ローカル実装はUNIX準拠ですが(たとえば、デフォルトdashbash有効になっているオプションでコンパイルxpg_echo)、リモートサーバーでの実装はそうではありません(たとえばbash)。

移植可能で安定した動作が必要な場合は、printf代わりに使用:

printf '[\33[01;32m  green  \33[01;37m]\n'
printf '[\33[01;31m  red  \33[01;37m]\n'

おすすめ記事