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 非零退出代码,即使对于成功的操作,这完全摆脱了错误捕获约定。
问题
我在 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 非零退出代码,即使对于成功的操作,这完全摆脱了错误捕获约定。