回答:
echo
Bashおよび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"
で実行しないでください。それは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
ですか?
#! /bin/bash
使用する必要がありますのでbash test.sh
.
現在のディレクトリも意味します。
./test.sh
、最後に実行します。スクリプトは.
、現在のディレクトリ内にある場合にのみ実行してください。
/bin/echo
dash(/bin/sh
)およびbash;echo
bashまたは./tes.sh
両方で正しく動作します。以下のコードはでbash
のみ動作します。if [$ UID -ne 0]; 次に「rootユーザーではない」をエコーする、「rootユーザーではない」エコーをエコーする