すべて。
次のサンプルコードがあります。
#!/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/bash
she-bangがありますが、スクリプトをで実行しているため、sh the-script
代わりsh
に解釈されますbash
。
ほとんどのシステムでは、bash
組み込み関数はecho
基本的にシーケンスを拡張しません。これは、このオプションが有効または使用されている場合にのみ\x
実行されます(オプションがすべて有効になっていない場合)。xpg_echo
-e
xpg_echo
posix
sh
これに関連して、ローカル実装はUNIX準拠ですが(たとえば、デフォルトdash
でbash
有効になっているオプションでコンパイルxpg_echo
)、リモートサーバーでの実装はそうではありません(たとえばbash
)。
移植可能で安定した動作が必要な場合は、printf
代わりに使用:
printf '[\33[01;32m green \33[01;37m]\n'
printf '[\33[01;31m red \33[01;37m]\n'