linux - 使用取消共享并仍在执行原始功能

标签 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 用法。

最佳答案

尝试一个简单的:

unshare -fm

它派生了一个新的子进程(因此父进程可以继续执行)并且没有指定新的 bash,它继承了环境变量。

关于linux - 使用取消共享并仍在执行原始功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402254/

相关文章:

javascript - 如何使用 NodeJS 在 SSH2 上执行多个命令

c - Linux ARM 自旋锁中是否存在竞争条件?

linux - cron.daily 中的 anacron 脚本未通过符号链接(symbolic link)运行

android - 更改应用程序中的文件权限

bash - 搜索字符串,如果匹配则添加

bash - 将整个内容从一个文件夹复制到另一个 shell 脚本

bash - 如何完全像在Dockerfile中一样运行Docker cmds

c++ - 我怎样才能在任何随机时间退出选择的系统调用?

linux - Qmake不包含qt的库路径

Linux 内核线程 - 调度程序