2017-09-08 30 views
0

我有一個尼克斯表達式文件(.nix)和殼腳本生成器,等指定:構建器腳本應該放置在獨立nix表達式的哪個位置?

stdenv.mkDerivation rec { 
    name = "my-env"; 
    builder = './my-builder.sh'; 
    ... 

./my-builder.sh: No such file or directory當我運行nix-build ./my-env.nix; nix表達式文件和構建器腳本並排坐在我的主目錄中。

我的意圖就是利用這個尼克斯公式文件準備使用nix-build的環境,然後每當我想用它(使用nix-shell)實際快速運行環境。

編輯:我剛剛注意到,nix-shell ./ my-env.nix工作正常;到目前爲止,我實際上沒有構建任何東西,所以我應該忽略builder

EDIT#2: 我的具體例子如下:

This line放兩個尼克斯表達並以相同的目錄中的助洗劑。 This other line使用nix-shell準備環境,但我認爲可以用類似的nix-build命令(特別是如果想安裝一個定製的包作爲環境的一部分,但也許這是不是在尼克斯很地道)

解決方案圍繞構建器的路徑

行情顯然是一個禁忌。我最後不得不等問題,並拼湊了一起,最終得到的東西運行:

builder = builtins.toFile "builder.sh" '' 
    source $stdenv/setup 
    mkdir -p $out 
    echo "" > $out/Done 
    echo "Done setting up Scala environment." 
''; 

回答

1

嘗試把一個分號該行的結束和刪除單引號:

builder = ./my-builder.sh; 

然後仔細檢查,以確保my-builder.sh是在同一目錄中.nix文件,你寫的。

+0

哎呀,我會編輯的問題。這實際上是一個抄本錯誤 - 我得到的不是複製/粘貼。所以,我事實上已經做到了。他們肯定在同一個目錄中。我也會用編輯#2編輯一下,指出一個完整的例子。 – bbarker

+0

符號鏈接是可疑的,因爲它看起來像你可能會指望尼克斯爲你取消引用該鏈接,以便它知道文件的真實位置。雖然我不確定。如果你可以做一個不涉及符號鏈接的例子,它可能會有所幫助。 –

+0

顯然,我的問題是,周圍的報價我周圍的建設者腳本相對路徑(不知道爲什麼這是一個問題)。除此之外,我還有其他問題,所以最後使用了一個內置的「虛擬」腳本。我會發布解決方案,我最後與 – bbarker

相關問題