【问题标题】:how to avoid override files with multiple users [duplicate]如何避免多个用户覆盖文件[重复]
【发布时间】:2019-03-28 05:17:55
【问题描述】:

我有一个包含多个临时文件的脚本。多个用户可以运行该脚本。但是,当多个用户同时运行脚本时,我需要避免覆盖输入文件。

我能用的最好的东西是什么?

cat inputfile | while read j
do
sed 's/beth/Beth/' >> temp1
cat temp2 | awk '{print $2}' >> temp2
cat temp2
done

如果其他用户在我运行我的脚本之前更新了输入文件,则不应覆盖它

【问题讨论】:

  • 这可能会有所帮助:man mktemp
  • 我需要使用 mktemp 而不是输入文件?一旦脚本下次运行,我也应该删除它们&当另一个用户同时运行它时它不会覆盖我的输入文件和输出
  • 第一个temp2是错字吗?
  • 不,我有一个 i/p 文件 .... 2 个临时文件 (temp1 & temp 2) ..temp 2 是 o/p 文件
  • 使用 mktemp 创建具有唯一名称的临时文件(替换 temp1 和 temp2)。

标签: bash shell temporary-files


【解决方案1】:

试试这个

TEMP=$(mktemp)                  # create unique tempfile
while read line; do             # read one line from inputfile
    # do what you want, e.g
    echo "($line)" >> $TEMP     # only an example
done < inputfile                # use inputfile in while-loop
cat $TEMP                       
rm $TEMP                        # remove tempfile

【讨论】:

  • 您想将输出重定向移到循环之外,在 done 之后,这样您就不会在每次迭代时打开附加、写入、关闭。 (当然在这种情况下,绝对不需要将标准输出收集到文件中,因此您可以将其复制到标准输出中。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2014-06-06
  • 2013-10-10
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多