スクリプト内の色オプションを指定したエコーコマンドとコマンドの動作が異なる


15

echo -e "\e[1;31mThis is red text\e[0m"コマンドラインで実行すると、赤いテキストが出力されます。

ただし、スクリプトファイルに書き込む場合 test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

走る $ sh test.sh

印刷する -e \e[1;31mThis is red text\e[0m

なぜ彼らは異なって行動するのですか?

回答:


29

echoBashおよびdash(/bin/sh)に組み込まれたシェルです。echoコマンドラインから実行する場合はBashビルトインを使用し、シェルスクリプトをsh実行する場合はDashビルトインを使用します。

のダッシュバージョンはオプションをecho認識しませんが、シーケンスの-e特別な処理を行わずにそのまま出力し\ます。

Bashを使用してシェルスクリプトを実行するか、次の/bin/echo代わりに使用しますecho

/bin/echo -e "\e[1;31mThis is red text\e[0m"

異なるバージョンの問題を回避するには、代わりechoに使用することをお勧めしますprintf。対照的に、echo printf常に\シーケンスを解釈しますが、最後に改行を自動的に追加しないため、必要な場合は最後に追加する必要があります\n

の一部のバージョンはprintf理解\eできないため、\033代わりに使用する必要があります。

printf "\033[1;31mThis is red text\033[0m\n"

できます。/bin/echodash(/bin/sh)およびbash; echobashまたは./tes.sh両方で正しく動作します。以下のコードはでbashのみ動作します。if [$ UID -ne 0]; 次に「rootユーザーではない」をエコーする、「rootユーザーではない」エコーをエコーする
qingfeng

1

で実行しないでください。それはsh test.shあなたが言ったようにテキストを白い色で印刷します。スクリプトを作成した後、実行して実行可能にします。

sudo chmod +x /path/test.sh

ここに画像の説明を入力してください

sudo、like sudo ./test.shまたは./test.sh両方でスクリプトを実行します。

または

でスクリプトを実行しbash

bash /path/test.sh

実行するchmod a+x test.shと、テキストが読み取り色で印刷されます。違いはなんですか。linuxで何が起こったのか./test.shと等しいはずsh test.shですか?
青峰

スクリプトの実行中に使用SHに持っていない、あなたはbashのインタプリタでスクリプトを作成して#! /bin/bash使用する必要がありますのでbash test.sh
のAvinashラジ

また、.現在のディレクトリも意味します。
アビナッシュラジ

スクリーンショットを見ると、test.shファイルはデスクトップ内に配置されています。そのため、そのデスクトップフォルダーに移動し./test.sh、最後に実行します。スクリプトは.、現在のディレクトリ内にある場合にのみ実行してください。
アビナッシュラジ

1

これには、正しい形式の正しいコマンドがすべて必要です。

適切なエコー文: echo "Hello World!"

色付きの適切なエコーステートメント: echo "\e[1;31mHello World!\e[0m"

bashスクリプトに色を追加することは、非常に単純ですが混乱を招くものの1つです。=)

このサイトは、あなたにすべてを明確に説明するのに役立つでしょう。正しいカラーコードをすべて覚えている人がいるので、私はしばしばそれを参照として使用します。笑

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.