使用取消共享并仍在执行原始函数

时间:2016-02-15 05:45:52

标签: linux bash shell nix nixos

我试图通过本页的说明来概括并制作一个shell脚本,特别是在这里:https://nixos.org/wiki/How_to_add_files_to_the_nix-store#Large_files因为Nix无法处理4.5 GB的文件,我出现了内存错误。

...因此

我目前的代码是:

#!/usr/bin/env bash

function do_store {
    if [ "$#" -lt 1 ]; then
      printf "Must provide the Xcode_dmg\n"
      exit 1
    fi
    unshare -m bash

    local
    sdk="$1"
    name="$(basename $sdk)"
    # Hack since the openssl sha and nix-store is super slow
    hash="a08d555c4f3fd905c53ee67720d9e6ade01e1b0b"
    store_path="$(nix-store --print-fixed-path sha1 $hash $name)"
    mount -o remount,rw /nix/store
    printf "$storepath\n\n0\n" | nix-store --register-validity --reregister
    exit
    # printf "name: %s, hash: %s, store_path: %s\n" "$name" "$hash" "$store_path"
}

do_store "$@"

...认为可以使用sudo -HE

调用它

问题是unshare立即启动一个新的bash shell并且“父”代码停止运行,这当然对我不好,因为我需要完成这个逻辑。此外,我需要保留当前用户的环境,因为我需要nix-store的路径,因此仍然有效,因此sudo -HE用法。

1 个答案:

答案 0 :(得分:0)

尝试简单:

unshare -fm

它分叉一个新子节点(所以父节点可以继续执行)并且不指定新的bash,它继承环境变量。