【问题标题】:append a parameter to a command in the file and run the appended command将参数附加到文件中的命令并运行附加的命令
【发布时间】:2021-04-14 12:09:09
【问题描述】:

我在名为$stat_val_result_command 的文件中有以下命令。 我想在文件末尾添加 -Xms1g 参数,这样应该看起来像这样:

  <my command in the file> -Xms1g

但是,我想在追加后运行此命令。我在一个名为“nextflow”的工作流系统中运行它。我绑了很多东西,包括关注,但它不起作用。检查默认在 Bash 中运行的脚本部分:

    process statisticalValidation {

   input:
   file stat_val_result_command from validation_results_command.flatten()

   output:
   file "*_${params.ticket}_statistical_validation.txt" into validation_results

   script:
   """
   echo " -Xms1g"  >> $stat_val_result_command && ```cat  $stat_val_result_command```
   """
}

【问题讨论】:

  • 三引号是怎么回事? Bash 将三个反引号完全相同视为一个,只是执行速度较慢,因为它是一对空的(打开/关闭),然后是其中包含内容的一对,然后是另一个空的(打开/关闭) 一对。 所有这些对产生子shell,包括空的。
  • 除此之外,$(cat anything)(或其等效的反引号)存在BashFAQ #50 中讨论的错误,因为命令替换的结果与参数扩展结果的解析方式相同。
  • 如果文件是普通的 unix 文本文件格式,echo " -Xms1g" &gt;&gt;thefile 将在文件中添加一个新行,而不是添加到已经存在的行中。由于您使用文件的方式,这可能无关紧要,但我仍然会检查文件以查看是否发生了这种情况。
  • @Gordan 如何添加到同一行?添加后如何在bash中运行?
  • 你能把文件变成一个普通的shell脚本,然后把-Xms1g作为参数传递给它吗(让脚本用例如commandToRun "$@"传递参数)?

标签: bash nextflow


【解决方案1】:

最好避免附加或操作本地化的工作目录中的输入文件,因为这些文件可以并且默认情况下是指向原始文件的符号链接。

在您的情况下,请考虑导出 JAVA_TOOL_OPTIONS 环境变量。这可能适合您,也可能不适合您,但如果您可以控制脚本的生成方式,可能会给您一些想法:

export JAVA_TOOL_OPTIONS="-Xms1g"
bash "${stat_val_result_command}"

此外,通常最好避免像这样本地化和运行脚本。这可能是不可避免的,但通常有更好的选择。例如third-party scripts,就像你的 Bash 脚本可以更简单地处理:

授予这些文件的执行权限并将它们复制到一个 在项目存储库的根目录中名为 bin/ 的文件夹。 Nextflow 会自动将此文件夹添加到PATH 环境中 变量,并且脚本将自动在您的 管道,无需指定调用它们的绝对路径。

这当然假设您可以控制和参数化创建 Bash 脚本的过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2015-01-20
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多