rai*_*ina 5 python virtualenv nixos nix windows-subsystem-for-linux
我想从 wsl 安排工作。该作业需要在 nix-shell 中运行,然后在 Nix-shell 下的 python 虚拟环境中运行。我尝试通过编写 shell 脚本运行来做到这一点./enter.sh。
#!/bin/bash
nix-shell -p python38Full python38Packages.virtualenv;
source .venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
然而,它并没有进入
(virt)
[nix-shell:xxx]
Run Code Online (Sandbox Code Playgroud)
我跑后./enter.sh。我需要先运行第一行,然后单独运行第二行。如果有人知道一种编写 shell 脚本的方法,该脚本可以通过运行一个脚本来完成这两个步骤,那将会非常有帮助。
Shell 脚本与终端中的交互式会话有些不同。
当您在终端中运行时nix-shell,原始 shell 进程会创建一个nix-shell进程并让它读取您的输入nix-shell,直到退出,将控制权返回给原始 shell。
另一方面,在 shell 脚本中,shell 将自行读取所有行,并且不会将 shell 脚本的处理委托给其他可执行文件,例如nix-shell. *
如果要运行 中的所有命令nix-shell,可以在文件顶部使用特殊的 shebang。例如:
#!/usr/bin/env nix-shell
#!nix-shell -p python38Full -p python38Packages.virtualenv
#!nix-shell -i bash
source .venv/bin/activate
# insert commands to be run here
Run Code Online (Sandbox Code Playgroud)
/usr/bin/env只是一个没有绝对路径的查找助手nix-shell。
nix-shell作为脚本解释器运行,它将解析行#!nix-shell以获取其自己的选项。该选项告诉它作为该脚本的实际解释器
-i bash进行调用。忽略 shebang 和line,因为它们是注释。已经提前设置了正确的环境变量。它继续获取激活文件。bashbash#!nix-shellnix-shell
您可能想在运行之前生成激活脚本source,但我认为这取决于您的工作流程。
或者,您可以使用--run COMMAND选项nix-shell在 Nix 提供的上下文中运行单个命令。
*:括号中的命令确实在单独的进程中运行,但这主要是一个实现细节。它不会让其他程序接管脚本的执行。
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |