実行時にbashスクリプトを変更する

実行時にbashスクリプトを変更する

スクリプトがありますtest

#! /bin/bash

sleep 60
echo hello

実行ファイルに設定して実行し、./testsleepコマンドを実行すると次のように変更しました。

#! /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から必要な最終結果が得られませんでした。

引用する

https://stackoverflow.com/a/3399850/1742825

関連情報