【问题标题】:How do I call a bash function in sub-script? [duplicate]如何在子脚本中调用 bash 函数? [复制]
【发布时间】:2018-06-19 23:42:12
【问题描述】:

考虑脚本:

#!/bin/bash

fun() {
  echo "hello $1"
}

echo "fun world" | parallel

现在,fun 函数在 echo 回显的脚本中不可用。

有没有办法让它可用/导出?

编辑:见GNU parallel

【问题讨论】:

  • 没有什么是你不必跳过至少六圈才能工作的。
  • @Pesa"fun world"这个字符串是一个小脚本。
  • 您能否详细解释一下您的要求。它很模糊(至少对我来说)
  • 真正的“子shell”是从主shellfork()ed 的shell,没有干预exec-family 系统调用。这些具有所有可用的功能。
  • @bitmask,顺便说一句,以备将来参考:parallel 不是 bash 的一部分,不是 bash 编写的,否则 bash 标记中没有涵盖 - 有一个关于 GNU Parallel 问题的整个单独标签,并且在未来,使用该标签提出有关它的问题可能会得到更好的接收。

标签: bash function


【解决方案1】:

你有引号内的函数名,正确的语法是:

echo $(fun world) | parallel

echo ("hello world") 的输出将通过管道传递给parallel,因此它可以对其进行处理。

编辑:

我可能误会了。如果您想要一个名为parallel 的脚本来执行该功能,那么会有一些问题。如果bash 则需要像@CharlesDuffy 所说的那样导出:

export -f fun

但请注意,并非所有 shell 都支持导出函数,因此请确保 parallelbash 脚本。

【讨论】:

  • fun world | parallel
  • @Cyrus:是的,不知道为什么 OP 想要echo,我认为这是一种简化。
  • 我假设 OP 希望 parallel 启动一个 shell,然后运行该函数。这不是一个不合理的要求——GNU parallel 实际上对这种事情有明确的支持(尽管我宁愿它不支持——我更喜欢xargs -P 的部分原因是 GNU Parallel 提供了每一个可以想象的特性的方法)。
  • @CharlesDuffy:啊,我没想到。
  • 不,我希望 funparallel 运行。这在parallel 中运行hello world
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2017-05-20
相关资源
最近更新 更多