YEARMONTHDAYHOURMINSECにホスト名と日付を格納するファイルを生成し、システム内のすべての環境変数を印刷し、以前に生成されたすべてのファイルをディレクトリに削除し、そうでない場合は新しいファイルを生成するスクリプトを作成したいと思います。
したがって、スクリプトはそのディレクトリを検索してそのパターンの古いファイルを削除する必要がありますが、他のファイルは削除しないでください。
#!/bin/bash
time=$(date +"%Y%m%d%H%M%S")
echo $(hostname) >>env.$time.txt
echo date:$time >>env.$time.txt
echo $(env)>>env.$time.txt
cat env.$time.txt
答え1
既存のスクリプトに対する簡単な修正は次のとおりです。
#!/bin/bash
# set location of backup such as `/var/log`
envDir=/path/to/dir
mkdir -p $envDir/junk
mv $envDir/env.*.txt $envDir/junk 2> /dev/null
time=$(date +"%Y%m%d%H%M%S")
echo $(hostname) >> $envDir/env.$time.txt
echo date:$time >> $envDir/env.$time.txt
echo $(env)>>$envDir/env.$time.txt
cat $envDir/env.$time.txt
rm $envDir/junk/*
echo $(env)
実際に利用できないデータを生成するyoursなどのいくつかの点は改善されるかもしれません。代わりにenv
、行で区切ってインポートするのは簡単なので、これを行う必要があります。
ファイル名を事前定義して、設定などのコードを簡素化し、メンテナンスを容易にすることもできます。
追加の説明を含む少し改善されたバージョンは次のとおりです。
#!/bin/bash
# set location of backup such as `/var/log`
# !!! Update this!
envDir=/path/to/dir
# set backup time
time=$(date +"%Y%m%d%H%M%S")
# set full file name for the backup
envFile=$envDir/env.$time.txt
# make temporary directory and ignore if it already exists
mkdir -p $envDir/junk
# move existing environment backup files to junk until we have our new output
mv $envDir/env.*.txt $envDir/junk 2> /dev/null
hostname >> $envFile
echo date:$time >> $envFile
env >> $envFile
cat $envFile
# remove the backup(s)
rm $envDir/junk/*
答え2
このスクリプトをテストしましたが、うまくいきます。このスクリプトは新しいファイルを作成し、ユーザーのホームディレクトリに既存のファイルがある場合は削除します。
#!/bin/bash
DATETIME=$(date +"%Y%m%d%H%M%S")
rm ~/env.*.txt
echo "$(hostname)
date:$DATETIME
$(env)" | tee ~/env.$DATETIME.txt
最初、それは可能性が高く見えたのでにdate
変更されました。DATETIME
date
次に、 rm ~/env.*.txt
globをワイルドカードとして使用して、ユーザーの$ HOMEディレクトリまたは〜/にあるすべてのファイルを削除して、ファイル名の静的部分または固定部分のみを一致させます。
このスクリプトを使用して生成されたすべての出力ファイルを処理し、ホームディレクトリから削除する必要があります。
ファイルが存在しない場合、ユーザーはファイルが存在しないという出力エラーメッセージを端末に受信する必要があります。このメッセージは無視することができ、後でスクリプトを実行したときに表示しないでください。
そして普段はTシャツはあまり問題にならないので、習慣的にTシャツを着る方ではtee
ありません。>>
最後に、echo
ここでは何度も使用する必要はありません。ファイルに書き込む次の2行を含む最初の行に開いた二重引用符を使用し、最後の行に閉じた二重引用符で終わり、出力をtee
ファイルにパイプしました。
を使用すると、tee
ファイルに記録された内容が端末に印刷され、重複しcat
ます。
また、-a
次のフラグを使用して、出力を既存のファイルの末尾に新しい行として追加することもできます。tee
tee -a