【发布时间】:2019-10-03 03:18:14
【问题描述】:
有没有一种简单的方法可以在 stdenv 提供的环境中添加一个 bash 函数?使用“nix-shell”进行开发时,我可以运行“unpackPhase”或“buildPhase”之类的命令,因为mkDerivation 将它们置于作用域内——它非常有用。我的派生属性也被添加到环境中。但我也希望看到一种在构建/外壳环境中自动添加属性作为函数的方法。
为了解释我的意思,我目前可以使用eval 语句或toFile 和source 将函数导入环境。例如,eval,类似于:
{ stdenv, ... } : stdenv.mkDerivation
{ shellHook = ''eval "$myFunctions"'';
myFunctions = ''
myFunction1(){
echo "doing myFunction1"
}
myFunction2(){
echo "doing myFunction2"
}
''
}
当我输入 nix-shell 时,将“来源”myFunction1 和 myFunction2。
但是,我期待像 mkFunction 这样的实用程序来补充 mkWrapper、mkProgram 和其他此类基本实用程序。我希望像下面那样使用它,其中使用mkFunction 定义的属性会自动“源化”如上。
{ stdenv, mkFunction, ... } : stdenv.mkDerivation
{ myFunction1 = mkFunction '' echo "doing myFunction1" '';
myFunction2 = mkFunction '' echo "doing myFunction2" '';
shellHook = '' echo "No need to source, myFunctions are already in scope." '';
}
我认为这样的实用程序会很有用。我认为setup hooks 可能会涵盖此用途,但我不确定如何使用它们。第一种方式做起来还不错(如果我在写这个问题的过程中没有弄清楚,我就不会费心问了)。但似乎nix 已经提供了那种实用程序,所以我还是要问。
【问题讨论】:
标签: nix