仅当行/文本不存在时才执行脚本

时间:2019-09-10 10:11:43

标签: linux bash sed terminal

我有下面的脚本,该脚本将在目录下搜索文件夹名称时附加文件awslogs.conf,但是如果我重新执行此脚本,则会再次附加。我该如何避免这样做?

for NAME in $(ls -1p /home/ec2-user/src/ |grep -v "^_" | grep -v "/$" |cut -d. -f1);
do
sudo tee -a /etc/awslogs/awslogs.conf << END
[$NAME]
datetime_format = %b %d %H:%M:%S
file = /var/log/airflow/$NAME/*/*/*.log
buffer_duration = 5000
log_stream_name = $NAME
initial_position = start_of_file
log_group_name = CLOUDWATCH_LOGS

END
done
sudo service awslogsd start
sudo systemctl enable awslogsd

1 个答案:

答案 0 :(得分:0)

默认情况下,tee命令将替换文件的内容。 -a会替代附加。如果要替换内容,只需从命令中删除-a

如果仅在文件不包含内容的情况下想要附加,那是完全不同的主张。例如,您可以将内容作为多行字符串拉出,然后使用GNU grep检查整个内容:

contents="[$NAME]
datetime_format …"
if ! grep --fixed-strings --null --quiet "$contents" /etc/awslogs/awslogs.conf
then
    tee -a …