执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

2024-04-03

From Bash 初学者指南表 7-1 https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html,我们可以说[ FILE1 -ot FILE2 ]将产生True if FILE1FILE2, or if FILE2存在并且FILE1才不是。在 shell 上执行此命令返回True if FILE1缺席并且FILE2存在。但是,当我在 make 脚本中使用它时,它产生了False每当FILE1缺席并且FILE2在场。准确地说,我在 make 和 shell 脚本中使用了以下命令:

[ FILE1 -ot FILE2 ] && echo 1 || echo 0

在 shell 上运行此命令会在预期时返回 1。但是,仅当以下情况时,通过 make 运行此命令才会导致 1FILE1存在并且被发现比FILE2。在其他情况下,即每当FILE1没有发现比FILE2或者每当FILE1缺席并且FILE2存在,上面的命令在我的 make 脚本中产生 0。请注意,在我的 make 脚本中,我将上述命令的结果存储在全局变量中。此全局变量稍后将通过条件在其中一个配方中使用。

所以,我想知道这是否是 make 中的错误/功能,还是我这边可能出现的问题(由于某些拼写错误或其他可能的错误来源)?

注意:我在 Ubuntu 18.04.3 上使用 GNU Make 4.1


尝试这个实验(在脚本中):

在我测试的情况下:当 file1 不存在且 file2 确实存在时:

#!/bin/sh

[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"

产生 file2 旧版本

#!/bin/bash

[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"

产生 file1 较旧

默认情况下 make 将使用 #!/bin/sh 作为 shell,您可以通过以下方式更改:SHELL = /bin/bash在你的 makefile 中

我不知道为什么这是不同的 - 它只是 sh 和 bash 之间的不同实现......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果 的相关文章

随机推荐

  • jquery 在视口检查器中同时检查多个元素

    我有一个 jQuery 函数来检查元素是否在视口中 如果是 它会添加 animate 类来启动动画并使元素可见 上面的方法有效 但现在 有多个元素 jQuery 仅针对该类的第一个元素blogcard 然后执行addClass animat
  • 证书对 Intranet SSL 有用吗?

    我的任务是开发命令行软件的内联网接口 现在我正在研究安全选项 我们的命令行应用程序已经完成 但我还没有开始编写 Web 界面 我不确切地知道潜在客户的安全要求是什么 尽管我相信ssh对于命令行界面来说通常是可以接受的 考虑到这一点 我请求帮
  • WebSocket 和纯 TCP 之间的根本区别是什么?

    我读过关于WebSockets http en wikipedia org wiki Web Sockets我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开简单的 TCP 连接并与服务器通信 为什么可以通过 websocket
  • 如何将 Maven 原型添加到 Github?

    我已经使用 Maven 开发了我的自定义项目 我想将其分享给社区 是否可以将其放在 GitHub 上 以便可以从那里下载 并在 create archetype 命令中使用 谢谢 标记 这篇文章可能会提供一点帮助 http cemerick
  • 使用 NSSM 将 NodeJs 进程作为 Windows 服务启动不起作用

    我看过无数关于如何使用 NSSM 的文章 http nssm cc http nssm cc 启动 NodeJS 进程 所以 我有以下简单的 NodeJS 文件 var http require http http createServer
  • PowerShell 从具有多个属性的 XML 中获取属性值

    以下 XML 文件是使用 PowerShell 2 从 2008 R2 故障转移群集运行 Get ClusterGroup 命令的输出的一个对象节点
  • Spyder3 - AttributeError:“SpyderKernel”对象没有属性“_show_mpl_backend_errors”

    我的 Spyder3 有问题 当我打开它时 控制台上会出现此警告 Python 3 8 5 default Jul 28 2020 12 59 40 Type copyright credits or license for more in
  • 检测 IE11 及其内置内存泄漏何时耗尽内存(1.5GB 可回收池)

    IE11 有一个有据可查的 iframe 内存泄漏问题 在 SPA 中 如果您使用 iframe 内存将增长到大约 1 5GB 之后速度会变慢直至崩溃 我的任务是检测浏览器何时即将崩溃并尽快重新启动页面 该应用程序是嵌入在 ASP NET
  • 保持fork最新

    我想将一些东西提交到 github 存储库 但我 显然 没有任何权利这样做 我对该存储库进行了分叉 提交了更改并提交了拉取请求 现在的问题是 过了一段时间 其他人已经提交了原始存储库 这意味着我的分叉不再是最新的 现在应该如何更新我的 fo
  • 在 Windows 中以编程方式更改自定义鼠标光标?

    我正在尝试将 Windows 光标 默认为 Windows 自定义方案 更改为我的自定义光标 名为 割绳子 有没有办法将所有光标 箭头 忙碌 帮助选择 链接选择 更改为我的 割绳子 如果您想更改默认的鼠标光标主题 您只需在注册表中更改它即可
  • createprocess默认暂停[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 dl
  • 如何调整 JavaFX 3D 子场景的大小?

    这段代码 http docs oracle com javase 8 javafx graphics tutorial camera htm CJAHFAHB将创建一个 300x300 大的 3D 场景 当我调整包含窗口 舞台的大小时 视口
  • mui 使用入口点插入作用域影子 DOM 样式时选择未设置样式的下拉选项

    请注意 这是针对 MUI v5 mui material 且NOT使用 v4 material ui core 最终弄清楚如何在使用情感入口点插入作用域阴影 DOM 样式时显示 mui material 样式 请参阅这篇文章如何在React
  • Android M:带有英雄元素的场景转换抛出 java.lang.IllegalStateException

    我有一个场景转换 但遇到了一些问题 带有英雄元素的场景转换抛出层超过最大值 GPU支持的尺寸 https stackoverflow com questions 26626344 scene transition with hero ele
  • 从 SiriKit 中的 INExtension 启动应用程序

    我想使用 SiriKit 开始锻炼 开始锻炼需要从应用程序扩展打开主应用程序 Apple 提供的样板文件INStartWorkoutIntentHandling处理程序是 func handle startWorkout startWork
  • 获取 Play 中当前循环的索引! 2 Scala 模板

    游戏中 1 可以在循环中获取当前索引 代码如下 list items myItems as item li Item item index is item li list Play2 中有类似的功能吗 for item lt myItems
  • 'pathutil' ruby​​ gem 与 jekyll (v3.9.0) 和 ruby​​ (v3.0.0) 兼容吗?

    我的问题 我有一个基于 jekyll 的静态网站 跑步后bundle exec jekyll serve 按照 jekyll 文档的指示 我得到下面的堆栈跟踪 我在堆栈跟踪中为该博客文章文件创建的 Markdown 文件完全是标准语法 我已
  • CollectionView 嵌套在 CollectionView 中

    我见过将集合视图嵌套在表视图中的解决方案 但对于我的应用程序 我需要有 2 个集合视图 因为这样可以更轻松地执行其他操作 所以我们调用根集合视图垂直集合视图仅垂直滚动和嵌套集合视图水平集合视图仅水平滚动 我使用故事板创建了它们 下面你会看到
  • Java 中的广度优先搜索

    我必须在 Java 中运行广度优先搜索来查找作业 我有一个 5x5 的图块网格 总共 24 个图块 1 个图块留为 空白 搜索的重点是通过向上 下 左或右移动 空白 来重新排列图块 最终将图块重新排列成正确的顺序 为了进行此搜索 我创建了一
  • 执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

    From Bash 初学者指南表 7 1 https tldp org LDP Bash Beginners Guide html sect 07 01 html 我们可以说 FILE1 ot FILE2 将产生True if FILE1比