如何解决来自同一脚本的不同结果
所以我有这个脚本
rm -f foo bar; cat foo > bar | cat bar > foo
我首先尝试在运行Ubuntu的计算机上运行它。我原本在cat foo
期间遇到错误,但运行成功。然后我尝试在AWS Cloud9(也可以在相同版本的Ubuntu上运行)上运行它,这给了我最初期望的错误。
在那之后,我尝试在不同的在线bash编译器上运行相同的命令,每个编译器又给了我不同的输出。第一个成功运行,第二个返回2个错误(foo不是文件,bar不是文件)。
为什么不同的机器从同一脚本给出不同的输出?
解决方法
这是一种竞赛条件,根据计划的顺序和时间,可能有多种结果:
- 负责
cat foo > bar
的shell进程已排定时间,创建了bar
,执行了cat
,并退出了有关foo
的错误 -
cat bar > foo
同样运行,创建foo
,将bar
读为空。
或
-
cat bar > foo
运行,创建foo
,退出并出现关于bar
的错误 -
cat foo > bar
运行,创建bar
,将foo
读为空。
或
-
cat foo > bar
运行,创建bar
,被抢占 -
cat bar > foo
运行,创建foo
,被抢占 -
cat foo
读取foo
为空 -
cat bar
读取bar
为空
因此,它可以在同一台机器上和不同机器上给出不同的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。