哪个mkvirtualenv返回false(1)但仍然执行

时间:2018-03-28 20:38:09

标签: bash which

有人可以向我解释为什么发出以下命令(在终端中)

<ul id="foldinglist" style="DISPLAY:none;" onClick="JavaScript: checkcontained();"><li><a href="JavaScript: chamaPagina('../../thisthat_redir.asp', '');">Demonst time</a></li></ul></li>

使用以下输出成功

which mkvirtualenv
echo "Return Value: $?"
mkvirtualenv test
deactivate

根据$Return Value: 1 Using base prefix '/usr' New python executable in /home/xxxxxx/.virtualenvs/test/bin/python3 Not overwriting existing python script /home/xxxxxx/.virtualenvs/test/bin/python (you must use /home/xxxxxx/.virtualenvs/test/bin/python3) Installing setuptools, pip, wheel...done. (test)$ $ 用户手册,它会返回并退出which if

的代码
  

如果一个或多个指定的命令不存在或不可执行

因此,正在执行不存在或不可执行的1命令。我认为这个问题的答案可以解释为什么当我在bash脚本中执行相同的代码行时,就像这样

mkvirtualenv

我改为获得以下输出

#!/bin/bash
which mkvirtualenv
echo "Return Value: $?"
mkvirtualenv test
deactivate

任何人都可以告诉我它为什么在脚本内部失败,因为它导致我的一个安装文件失败。

修改

根据this answer,只需在每个bash脚本中获取$ Return Value: 1 $ ./test.sh: line 5: mkvirtualenv: command not found $ ./test.sh: line 6: deactivate: command not found 文件就可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

当您以/bin/bash的身份运行脚本时,您没有使用用户上下文,而是使用了常规上下文(我缺乏适当的术语,请耐心等待),基本上您将无法访问可能碰巧已设置的所有ENV变量在bashrc / profilerc / like中。而且发生时virtualenvwrapper要求您设置一些东西。

如何解决?

/bin/bash更改为/usr/bin/env bash,脚本的行为就像您在shell中编写此代码一样。