如何创建外壳脚本二进制文件而不在nix文件中编码字符串

问题描述

要创建二进制shell脚本,请使用writeShellScriptBin。此函数采用一个代表要生成的Shell脚本的字符串,例如:

  my-script = writeShellScriptBin "my-script" ''
    # Some script
  ''

使用writeShellScriptBin非常适合小型脚本,但是一旦脚本开始增长,生成的字符串将变得难以维护。所以我想知道writeShellScriptBin的替代方案是什么。

解决方法

substituteAll。示例:

substituteAll {                                                                 
  src = ./foo.in;                                                 
  name = "foo";                                                     
  dir = "/bin";  # If you omit it,you will get substitution result in $out                                                                 
                                                                                
  isExecutable = true;  # it is script,so you are likely want this.                                                                                                           
  inherit curl jq execline;                                                     
}