忽略 Mac OS X 中 xargs 的空结果

2024-01-16

我的网站的代码使用这段代码在服务器(Ubuntu)上自动部署。

cmd = 'cd ' + checkout_dir + ' && ' + svn_command + " st | awk '{print $2}' | grep -v ^deploy | tac | xargs -r" + svn_command + " revert -R && " + svn_command + ' up -r ' + options.revision

这个命令的作用是cd进入结账目录,运行svn status,然后提取文件名($2),删除deploy目录及其列表中的所有文件(我不想恢复它)。如果没有参数,它不会运行 svn revert 命令,否则它会运行。

不幸的是xargs -r不适用于我的机器(Mac OS X 10.8)。所以我被困在这里,有人可以帮忙吗?


事实上,BSD 实现xargs没有-r flag (--no-run-if-empty)。 Linux 中的 GNU 版本有它。

以下是解决该问题的一种方法,该方法在 Linux 和 BSD 中都有效:

... | (grep -v ^deploy || echo :) | xargs svn revert

The grep ... || echo :中间会生成一条带有:在它的情况下输出grep是空的。有点dirty, 因为xargs仍然会运行命令svn revert :。如果您的存储库不包含该文件:那么这应该没有影响,所以可以接受。这:可以是其他任何内容,只要您的存储库中没有此类文件即可。

最后,作为@三重 https://stackoverflow.com/users/874188/tripleee指出,grep ... || echo :必须包含在(...), 因为:

the ||优先级高于|,从而终止(第一个)管道。

您的代码看起来像一个 Python 字符串。这样会更具可读性:

kwargs = {
  'svn': svn_command,
  'dir': checkout_dir,
  'revno': options.revision,
}
cmd = "cd {dir} && {svn} st | awk -v r=1 '$2 ! ~ /deploy/ {{ print $2; r=0 }} END {{ r || print \":\" }}' | xargs {svn} revert && {svn} up -r {revno}".format(**kwargs)

我对你原来的内容做了一些修改:

  • 移动了逻辑grep inside awk, as @三重 https://stackoverflow.com/users/874188/tripleee建议。请注意,自从grep不再需要 hack,也不再需要换行(...)
  • 丢弃了tac,因为我不明白其中的意义
  • 丢弃了-R from svn revert,因为我认为你不需要它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

忽略 Mac OS X 中 xargs 的空结果 的相关文章

随机推荐

  • SQL Server:过滤 sp_who2 的输出

    在SQL Server下 有没有一种简单的方法来过滤sp who2的输出 例如 假设我只想显示某个数据库的行 你可以尝试类似的东西 DECLARE Table TABLE SPID INT Status VARCHAR MAX LOGIN
  • 如何检查使用哪个编译器来构建Python

    有没有办法知道使用哪个编译器来构建Python安装在特定的linux机器上 我尝试使用ldd on the Python动态库 1 但我无法理解它是否是用gcc或英特尔编译器 1 ldd libpython2 7 so 1 0 linux
  • Clang 在 c++98 模式下使用 std::stoi 编译代码

    我需要用 C 98 编译我的 cpp 而不是我的学校项目的 C 11 所以我用了 std c 98编译 CPPFLAGS Wall Werror Wextra std c 98 但我犯了一个错误并使用了C 11std stoi功能 i st
  • 如何让浮动div居中?

    我想将下面模型中出现的三个 div 居中 全部都有 float left 这可能吗 我不介意有包装器div Text align center 和 display inline block 不适用于我的代码 如果你想让它们居中 你就不能浮动
  • 发布时母版页出现“无法加载类型”错误

    本地查找一切正常 但是当我将 ASP NET 应用程序发布到远程服务器时 出现以下错误 Server Error in Application Parser Error Description An error occurred durin
  • 页面加载时的 JSF 重定向

    简短的问题 是否可以进行重定向 例如当用户未登录时 当呈现页面时 为此你should http java sun com products servlet Filters html use a Filter http java sun co
  • 如何用颜色突出显示浏览器选项卡

    我有一个聊天 Web 应用程序 我需要一项功能 其中如果特定用户在浏览器窗口中打开了多个选项卡 并且聊天选项卡不是活动选项卡 那么如果他从另一端收到 ping 则聊天选项卡应该自动突出显示以吸引用户注意力 我打算用 jQuery 来做这件事
  • 高调的 MonoTouch 应用程序? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想要一些使用 MonoTouch 创建的高调应用程序的示例 您打电话回家的应用程序 进入所属类别前 25 名的应用程序 我在哪里可以找到此类应用程序
  • 如何在 Debian postinst 脚本中获取新安装的版本?

    Per the Debian 政策手册 http www debian org doc debian policy ch maintainerscripts html 我的 postinst 脚本在升级和配置时被调用 如 postinst
  • Hibernate Validator - 添加动态 ConstraintValidator

    了解后Hibernate 自定义验证器 https docs jboss org hibernate validator 4 0 1 reference en html validator customconstraints html 它让
  • 无法使用 GAE/J DataNucleus 插件版本 2.1.2 获取新创建的 JDO 持久实体的 ID

    我的问题 我正在使用新的 1 7 5 GAE J SDK 将我的应用程序从 GAE J 的 DataNucleus 插件版本 1 x 移植到 2 0 这将我的 JDO 版本从 2 3 更改为 3 0 1 我的持久实体类有一个编码字符串类型的
  • Javascript - 将 INI 文件解析为嵌套关联数组

    我是 Javascript 新手 在将 INI 格式的文件解析为嵌套对象时遇到问题 我的文件格式如下 ford car focus transmission standard ford car focus engine four cylin
  • 依赖注入带来的性能问题

    在我的探查器报告中 我越来越多地看到使用依赖项注入进行基于模拟的测试的结果 许多依赖项是静态的 但因为我们想要单独测试方法 所以它们被更改为实例成员 如下例所示 class ShortLivedThing IDependency1 dep1
  • 如何在Java中反转System.loadLibrary

    我正在编写一个 JNI 程序 我想在使用完该 dll 后卸载它 为此我可以做什么 我找不到unloadLibrary Javadoc 中的方法 没有直接的方法可以手动卸载 dll 简而言之 当垃圾收集器处理加载 jni dll 的类的 Cl
  • ajax post 工作与 angularjs $http 不适用于 ASP.NET MVC 4

    我有两个项目客户端和服务器端 客户端项目是纯htmljs 服务器端是 ASP NET MVC 4 和 Web Api 因为有两个项目我需要启用CROS功能 我添加到服务器的网络配置
  • 如何从 Osmdroid 地图上删除标记

    我正在创建一个 Android 应用程序 我需要在地图上设置标记 由于我的应用程序需要离线功能 我需要使用 Osmdroid 来解决这个问题 现在我的问题是地图上的标记 我可以使用标记或 ItemizedOverlay 轻松添加它们 但我遇
  • 我的 Eclipse 计时器无法正常工作

    我是 Eclipse 新手 我的 Eclipse 计时器无法正常工作 这是我的 java util Timer 定时器中的代码 Button countDownButton2 Button findViewById R id countDo
  • 在c#中执行powershell脚本

    下面是我用来尝试执行 powershell 脚本的脚本 但每当我运行它时 我只会得到一个空白的命令窗口 C Code static void Main string args string text System IO File ReadA
  • 如何在 Mac OS 10.6+ 中使用 obj-c 切换到登录窗口

    我有一个应用程序 我需要以类似于此应用程序的方式切换到登录窗口 http itunes apple com us app lock me now id464265594 mt 12 http itunes apple com us app
  • 忽略 Mac OS X 中 xargs 的空结果

    我的网站的代码使用这段代码在服务器 Ubuntu 上自动部署 cmd cd checkout dir svn command st awk print 2 grep v deploy tac xargs r svn command reve