WSL——找不到命令

WSL -- Command Not Found

我运行在 PowerShell wsl pipenv run python ~/test.py 中执行以下命令并收到以下错误 /bin/bash: pipenv: command not found。如果我启动 WSL/Ubuntu,我可以 运行 pipenv run python ~/test.py 并获得成功的输出。在 PowerShell 和 Git Bash 中,我可以 运行 pipenv -h 并获得正确的输出。 WSL 在哪里寻找这个命令?

在相关说明中,当我启动 WSL/Ubuntu 并获得成功输出时,我可以 运行 python ~/test.pypython3 ./test.py。但是在 PowerShell 中,只有 wsl python3 ~/test.py 有效。当我 运行 wsl python ~/test.py 我收到相同的命令未找到错误。我错过了什么?

根据我们的评论交流,问题是 pipenv 可执行文件所在的目录 - /home/<username>/.local/bin/ - 在调用时不在 PATH 环境变量中命令非交互

这表明它是一个扩展PATH初始化文件,在你的情况下它似乎是~/.bash_profile;要强制显式 bash 调用源文件,必须传递 -l (--login) 选项。

您报告以下命令最终对您有效:

bash -l -c "cd ~ && pipenv run python ~/test.py"

注:

  • -c 的显式调用是 wsl.exe 在向它传递要执行的命令时在幕后执行的操作,尽管没有 -l(例如 wsl date 变成 bash -c date).

    • -c 的使用使得 shell -interactive,这意味着 ~/.bashrc 不是来源任何一个;如果您想要后者,请添加 -i
  • 没有命令(仅执行 wsl.exebash.exe),输入交互式 bash shell,实际上 - 是否使用-l,因此自动来源~/.bash_profilewsl.exe/bash.exe使用替代机制请求登录shell:参数数组的第一个条目(您可以使用 echo [=34=] 检查)设置为 -bash,初始 - 告诉 Bash 开始登录 shell).

另请参阅:谢谢, Zymotik.