当前位置: 首页 > 知识库问答 >
问题:

对'find'-sh的结果执行函数

澹台聪
2023-03-14

我正在编写一个shell脚本,在基于Alpine的docker映像上运行。它的shell是/bin/sh

#!/bin/sh

function get_tags {
  # do stuff
}


export -f get_tags

# get all YAML files in ./assets/config that have 'FIND' somewhere in the filename
# pass each to the get_tags function
find ./assets/config -type f \( -iname "Find*.yaml" -or -iname "Find*.yml" \) -exec sh -c 'get_tags "$0"' {} \;

我还有别的办法吗?

我的问题不是“shbash有什么区别”。我的问题是:如何完成在find命令的输出上运行函数的任务。

共有1个答案

双恩
2023-03-14

导出函数是Bash的一个特性。Alpine Linux不附带bash。

相反,您可以使用while read循环来处理结果,因为这是POSIX,可以在所有shell上工作:

get_tags() {
  echo "Getting tags for $1"
}

find ./assets/config -type f \( -iname "Find*.yaml" -o -iname "Find*.yml" \) |
    while IFS="" read -r file
    do
      get_tags "$file"
    done
 类似资料:
  • 一个函数的执行结果要返回给调用者,除了使用return功能,还有一种办法,那就是以引用的形式传递参数,然后在内部修改这个参数的值。前一种方法往往只能返回一个值,如果我们的函数执行结果具有多种数据,便需要把这些数据打包到一个数组、类等复合类型的变量中才能得以实现;但后一种方法相比而言就简单一些了。 运行时传递引用:Call-time Pass-by-ref 标题有点绕口,其实很简单,功能如以下php

  • 问题内容: 我将如何执行.SH文件(这是localhost,没有远程连接或其他任何内容)?当我进行搜索时,我看到了很多其他东西,但这些似乎没有用。 这是Java6。同样重要的是,SH所做的只是在移动两个文件夹。 谢谢! 问题答案: 您可以使用ProcessBuilder

  • 问题内容: 我将如何执行.SH文件(这是localhost,没有远程连接或其他任何内容)?当我进行搜索时,我看到了很多其他东西,但这些似乎没有用。 这是Java6。同样重要的是,SH所做的只是在移动两个文件夹。 谢谢! 问题答案: 您可以使用ProcessBuilder

  • 我做了一个简单的科学测验java应用程序,有4个框架:登录、菜单、测试和结果。 前三个帧工作正常,但当我单击显示结果时,它显示错误。这是我在Test JFrame中的代码。如果您愿意,我也可以发送其他帧的编码 这是我的错误 测试JFrame编码

  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 问题内容: 有一个对话列表,每个对话都有一个消息列表。每个消息都有一个不同的字段和一个字段。我们需要考虑的是,在对话的第一条消息中使用了动作,在几条消息中使用了动作之后,过了一会儿,依此类推(有一个聊天机器人意图列表)。 将对话的消息动作分组将类似于: 问题: 我需要使用ElasticSearch创建一个报告,该报告将返回每次会话的;接下来,我需要对类似的东西进行分组并添加一个计数;最终将导致as