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

时间:2017-03-23 06:54:55

标签: linux bash shell virtualenvwrapper

问题

我在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

在终端中它返回我:

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

从脚本执行此命令时,它返回:

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

命令

$ ls -l setup2.sh

返回:

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

使用shell脚本

创建项目

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

#!/bin/bash
mkproject test_env

当我按相对路径运行此脚本时:

$ ./setup2.sh

或aboslute path:

$ /home/name/env/setup2.sh

它说:

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

在shell中创建项目

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

$ mkproject test_env

一切正常

2 个答案:

答案 0 :(得分:0)

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

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

type mkproject

答案 1 :(得分:0)

在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函数返回非零退出代码,即使是成功的操作,也会完全抛出错误捕获约定。