2017-10-03 8 views
0

スクリプトの特定のステップで他のコマンドの結果で構成される変数を設定する方法はありますか?特定のステップでのみサブシェルを使用して変数を設定する

PENULTIMATE_F="$(ls -t "${LOGS_DIR_DS}" | head -n 2 | tail -1)" 
LAST_F="$(ls -t "${LOGS_DIR_DS}" | head -n 1)" 

は、現在の値は、スクリプトのコードが実行されたときのディレクトリに作成された最新の二つのファイルが、スクリプトの開始時に存在したものではありません。

解説と回答:私が書いた監視スクリプトにはこれが必要でした。問題はまったく異なり、私は狂っていませんでした。これは良いことです。関数の後の時点で変数を初期化すると、現在の内容と予想される内容がロードされます。 私の問題は、実際には空のファイルを作成することでした。コンテンツがないため、存在するかどうかにかかわらず短い「if」関数が作成されました。実際には最後のファイルは実際には実際のコンテンツはそのファイルにエコーされていなかったからです。

エラーが他の場所にあるという自信を実際に与えてくれてありがとう!

+0

ファイルを作成した後、変数を移入します。 – choroba

答えて

1

簡単な答え:後で変数を初期化してください。

または:変数の代わりに関数を使用します。その後、いつでも更新された結果が得られるように関数を呼び出すことができます。

penultimateFile() { ls -t "${LOGS_DIR_DS}" | head -n 2 | tail -1; } 
lastFile()  { ls -t "${LOGS_DIR_DS}" | head -n 1; } 
PENULTIMATE_F=$(penultimateFile) 
LAST_F=$(lastFile) 
関連する問題