如何在 Pipfile 的 [脚本] 中运行"cd"命令?



我需要在一个Pipfile中制作这样的东西:

...
[scripts]
my_script = "cd folder"
...

使用cd确实有效。它似乎不起作用,因为pipenv run生成了一个新的shell(与运行pipenv run的shell不同(,并在那里运行命令。在那个单独的外壳中,它会cd到文件夹。。。然后简单地退出。在执行pipenv run的原始shell中,您仍然在同一个文件夹中。

您可以检查它是否可以正确访问文件夹:

StackOverflow$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── ...
StackOverflow$ cat Pipfile
...
[scripts]
# To use multiple commands, wrap with `bash -c` 
# See https://github.com/pypa/pipenv/issues/2038
my_script = "bash -c 'cd folder && ls'"
StackOverflow$ pipenv run my_script
file1.txt file2.txt file3.txt
StackOverflow$

脚本快捷方式生成了一个shell,它成功地将cd转换为folder,但在原始shell中,仍然在同一目录中(在本例中为"StackOverflow"(。

现在,我不知道在文件夹中创建cd的快捷方式的目的是什么。我认为这不是my_script的唯一命令,因为执行cd folder会比执行pipenv run my_script更简单。

如果要在该文件夹中执行一些操作,那么我建议为所有其他命令编写一个单独的脚本,只需使用[scripts]快捷方式即可调用该脚本。

StackOverflow$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── scripts
└── my_script.sh
StackOverflow$ cat my_script.sh
#!/bin/bash
cd folder
for file in *
do
echo "Doing something to $file"
sleep 3
done
echo "Done."
StackOverflow$ cat Pipfile
...
[scripts]
my_script = "./scripts/my_script.sh"
StackOverflow$ pipenv run my_script
Doing something to file1.txt
Doing something to file2.txt
Doing something to file3.txt
Done.

[script]快捷方式仍然正常工作(即cd进入文件夹并在那里做事(。它也比链接命令更好,pipenv维护人员已经讨论过链接命令不是它的预期目的。

  • https://github.com/pypa/pipenv/issues/2878
  • https://github.com/pypa/pipenv/issues/2160

ex(如果你想执行docs/Makefile,你可以在下面写。

# Pipfile
[scripts]
doc_clean = "bash -c 'cd docs && make clean'"
doc_build = "bash -c 'cd docs && make html'"

执行"pipenv-run-doc_clean"或"pipenv_run-doc_build"。

相关内容

  • 没有找到相关文章

最新更新