微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自同一脚本的不同结果

如何解决来自同一脚本的不同结果

所以我有这个脚本

rm -f foo bar; cat foo > bar | cat bar > foo

我首先尝试在运行Ubuntu的计算机上运行它。我原本在cat foo期间遇到错误,但运行成功。然后我尝试在AWS Cloud9(也可以在相同版本的Ubuntu上运行)上运行它,这给了我最初期望的错误

在那之后,我尝试在不同的在线bash编译器上运行相同的命令,每个编译器又给了我不同的输出。第一个成功运行,第二个返回2个错误(foo不是文件,bar不是文件)。

为什么不同的机器从同一脚本给出不同的输出

解决方法

这是一种竞赛条件,根据计划的顺序和时间,可能有多种结果:

  1. 负责cat foo > bar的shell进程已排定时间,创建了bar,执行了cat,并退出了有关foo的错误
  2. cat bar > foo同样运行,创建foo,将bar读为空。

  1. cat bar > foo运行,创建foo,退出并出现关于bar的错误
  2. cat foo > bar运行,创建bar,将foo读为空。

  1. cat foo > bar运行,创建bar,被抢占
  2. cat bar > foo运行,创建foo,被抢占
  3. cat foo读取foo为空
  4. cat bar读取bar为空

因此,它可以在同一台机器上和不同机器上给出不同的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。