我正在尝试运行一个简单的脚本-将 git 存储库克隆到某个目录,然后cd
到该目录以执行安装脚本。
此脚本位于 Makefile 中。
但cd
似乎不起作用。它没有找到我的安装脚本。
我cd
在脚本中的之后添加了一个密码,它向我显示了我执行脚本的目录,而不是我cd
进入的目录。
有什么问题?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
Run Code Online (Sandbox Code Playgroud)
=>
pwd
: /hereIsPathToDirectoryFromWhichIRunTheScript
python:无法打开文件“setup.py”:[Errno 2] 没有这样的文件或目录
它也不适用于./setup.py
.
如果我输入绝对路径~/some_dir/setup.py
,脚本稍后会失败,因为它试图访问同一文件夹中的资源。
phe*_*mer 46
您正在使用生成文件。Makefile 不是脚本,每一行都在一个新的 shell 中执行。这意味着当您在线更改环境(例如cd
)时,该更改不会传播到下一行。
解决方案是,当您想要保留命令之间的环境时,您可以在同一行中运行所有命令。然后所有命令都将在同一个 shell 中执行,并保留环境。
例如:
target:
git clone http://somerepo ~/some_dir
cd ~/some_dir/ && python myscript.py install
Run Code Online (Sandbox Code Playgroud)
脚本在子 shell中运行,这意味着它有自己的$PWD
. 一旦退出,您就会得到“old” $PWD
。如果您想保留$PWD
您需要source
(也称为。.
)脚本而不是运行它。然而,这在 Makefile 中不起作用,因为每个命令都在单独的子 shell 中运行:
$ pwd
/home/user
$ cat test.sh
cd /
$ cat Makefile
test:
. ./test.sh && pwd
pwd
$ make test
. ./test.sh && pwd
/
pwd
/home/user
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43854 次 |
最近记录: |