我想安排wsl的作业。作业需要在nixshell中运行,然后在nixshell下的python虚拟环境中运行。我试图通过编写一个shell脚本来实现这一点,运行./enter.sh
#!/bin/bash
nix-shell -p python38Full python38Packages.virtualenv;
source .venv/bin/activate
但是,它没有进入
(virt)
[nix-shell:xxx]
在我运行./enter.sh
之后。我需要先运行第一行,然后分别运行第二行。
如果有人知道一种编写shell脚本的方法,可以通过运行一个脚本来完成这两个步骤,这将非常有帮助
Shell脚本与终端中的交互式会话略有不同
当您在终端中运行
nix-shell
时,原始shell进程将创建一个nix-shell
进程,并让它读取您的输入,直到nix-shell
退出,从而将控制权返回给原始shell另一方面,在shell脚本中,shell将自己读取所有行,并且不会将shell脚本的处理委托给其他可执行文件,如
nix-shell
.*如果要运行
nix-shell
中的所有COMAMND,可以在文件顶部使用一个特殊的shebang。例如:/usr/bin/env
只是查找nix-shell
的助手,没有绝对路径。nix-shell
作为脚本解释器运行,它将为自己的选项解析#!nix-shell
行。-i bash
选项告诉它调用bash
作为此脚本的实际解释器。bash
忽略shebang和#!nix-shell
行,因为它们是注释nix-shell
已经预先设置了正确的环境变量。它将继续源激活文件您可能希望在运行
source
之前生成激活脚本,但我认为这取决于您的工作流或者,您可以使用
nix-shell
的run COMMAND
选项在Nix提供的上下文中运行单个命令*:括号中的命令在单独的进程中运行,但这主要是一个实现细节。它不会让其他程序接管脚本的执行
相关问题 更多 >
编程相关推荐