スクリプトがありますtest
#! /bin/bash
sleep 60
echo hello
実行ファイルに設定して実行し、./test
sleepコマンドを実行すると次のように変更しました。
#! /bin/bash
sleep 60
echo hello!!
出力はですhello!!
。なぜできないのだろうかhello
。
hello
今後の変更に関係なく、どのように出力できますか?
答え1
あなたの状況の解決策は次のとおりです。
スクリプトを関数に分割し、source
関数を呼び出すたびに別のファイルから呼び出します。その後、いつでもこのファイルを編集でき、実行中のスクリプトは次にファイルをインポートするときに変更を選択します。
foo() {
source foo.sh
}
foo
テスト
以下callee.sh
のように2つのスクリプトを作成しました。called.sh
#The contents of callee.sh script is as below.
callee.sh
foo() {
source called.sh
}
foo
#The contents of called.sh script is as below.
called.sh
#! /bin/bash
sleep 60
echo hello
callee.sh
スクリプトをもう一度呼び出して実行しますcalled.sh
。デフォルトでは、called.sh
これは動的に変更されるスクリプトです。
これcallee.sh
で実行したら、別のシェルを開き、内容を次のように変更します。
#! /bin/bash
sleep 60
echo hello
echo "I added more contents here"
callee.sh
これで、endの後にスクリプトを呼び出す最初のシェルからsleep
私が得た出力は次のようになります。
hello
ご覧のとおり、出力I added more contents here
から必要な最終結果が得られませんでした。
引用する