首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nix-shell '<nixpkgs>‘-A gnused的等价shell.nix是什么

nix-shell '<nixpkgs>‘-A gnused的等价shell.nix是什么
EN

Stack Overflow用户
提问于 2020-09-19 14:51:07
回答 1查看 336关注 0票数 2

我正在尝试探索gnu sed代码库。

我可以从命令行执行此操作:

代码语言:javascript
复制
nix-shell '<nixpkgs>' -A gnused
unpackPhase
cd sed-4.8
configurePhase
buildPhase

,然后在sed等下编辑代码。

但是,我想使用未安装的ctag:

代码语言:javascript
复制
nix-shell -p ctags

安装程序包,但:

代码语言:javascript
复制
nix-shell '<nixpkgs>' -A gnused -p ctags

获取错误:

代码语言:javascript
复制
error: attribute 'gnused' in selection path 'gnused' not found

我意识到我必须使用shell.nix,但找不到上面的mkShell示例。

附注:两次nix-shell调用都能达到所需的结果,但这看起来很笨拙:

代码语言:javascript
复制
nix-shell -p ctags
nix-shell '<nixpkgs>' -A gnused
EN

回答 1

Stack Overflow用户

发布于 2020-09-21 21:56:04

在等待了几天之后,我发现了this talk,它与nix-shell、nix-build和nix-instantiate手册页中的示例相结合,产生了所需的答案。

等同于:

代码语言:javascript
复制
nix-shell '<nixpkgs>' -A gnused

是:

代码语言:javascript
复制
nix-shell -E 'with import <nixpkgs> {}; gnused'

或者作为shell.nix:

代码语言:javascript
复制
# shell.nix
with import <nixpkgs> {};
gnused

等同于:

代码语言:javascript
复制
nix-shell -p ctags

是:

代码语言:javascript
复制
nix-shell -E 'with import <nixpkgs> {}; runCommand "dummy" { buildInputs = [ ctags ]; } ""'

或者作为shell.nix:

代码语言:javascript
复制
# shell.nix
with import <nixpkgs> {};
runCommand "dummy" { buildInputs = [ ctags ]; } ""

注:runCommand采用3个输入参数,在这种情况下,有意将第3个参数留空。

要将两者结合起来,我们使用override,但不使用gnused.override,它将覆盖gnused的mkDerivation参数,而使用gnused.overrideAttrs,它覆盖mkDerivation内部的属性。

代码语言:javascript
复制
nix-shell -E 'with import <nixpkgs> {}; gnused.overrideAttrs (oldAttrs: { buildInputs = [ ctags ]: })'

或者作为shell.nix:

代码语言:javascript
复制
# shell.nix
with import <nixpkgs> {};
gnused.overrideAttrs (oldAttrs: { buildInputs = [ ctags ]; })

注意:要查找派生的属性,如gnused,请使用nix repl '<nixpkgs>'调用nix repl并键入gnused.,然后按tab键完成或使用nix edit nixpkgs.gnused,这将在由$EDITOR设置的编辑器中打开派生。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63966084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档