mkproject:在 shell 脚本中找不到命令

mkproject: command not found in shell script

问题

我在 shell 脚本中创建 virtualenvwrapper 项目时遇到问题。当我在 shell 中创建项目时,一切正常。但是想在 shell 脚本中创建它。

请帮我解决这个问题。

我试图找到答案。但是似乎没有人在 shell 脚本中创建 virtualenvwrapper 项目时遇到问题。

我的设置

我正在使用 Ubuntu 14.04。 我已经安装了 "virtualenvwrapper" 软件包:

sudo pip install virtualenvwrapper

并将此行写入 ~/.bashrc:

export WORKON_HOME=~/work/.envs
export PROJECT_HOME=~/work/projects
export VIRTUAL_ENV_DISABLE_PROMPT=
source /usr/local/bin/virtualenvwrapper.sh

已激活 bash 配置文件:

$ source ~/.bashrc

并创建了项目目录:

$ mkdir -p $PROJECT_HOME

附加信息

当我运行:

type mkproject

在终端里 returns 我:

mkproject is a function
mkproject () 
{ 
    typeset -a in_args;
    typeset -a out_args;
    ...[and more lines after]
}

当此命令从脚本中执行时 returns this:

./setup2.sh: line 2: type: mkproject: not found

命令

$ ls -l setup2.sh

returns:

-rwxrwxr-x 1 name name 49 марта 23 12:55 setup2.sh*

正在使用 shell 脚本创建项目

之后,我创建了 shell 脚本 (setup2.sh),其中包含以下几行:

#!/bin/bash
mkproject test_env

当我通过相对路径运行这个脚本时:

$ ./setup2.sh

或放弃路径:

$ /home/name/env/setup2.sh

它说:

./setup2.sh: line 2: mkproject: command not found

正在 shell

创建项目

但是当我 运行 命令在终端中创建一个项目时:

$ mkproject test_env

一切正常

这可能有多种原因,但我会首先在您的脚本中输出 $PATH 并验证它是否包含 mkproject 应该所在的目录。

您还应验证 mkproject 确实是可执行文件,而不是别名或函数,因为默认情况下不导出函数。为此,运行 在您的控制台中输入命令

type mkproject

在 shell 脚本中执行 mkproject 很简单。您只需完成使该功能可用于您的交互式 shell 的相同步骤,即采购您的 ~/.bashrc 脚本。

只需将其包含在脚本中的某处即可:

source /PATH/TO/YOUR/.bashrc

完成此操作后,您可以像往常一样 运行 mkproject

请注意,如果您的脚本使用 set -e 之类的严格错误检查,您将需要暂时简化上述错误检查以及脚本中对 virtualenvwrapper 函数的任何调用,例如:

set +e
source /PATH/TO/YOUR/.bashrc
set -e

set +e
mkproject WHATEVER
set -e

我不确定为什么会发生这种情况,但是 virtualenvwrapper 功能 return 非零退出代码,即使对于成功的操作,这完全摆脱了错误捕获约定。