2

我需要在 Pipfile 中做这样的事情:

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

2 回答 2

2

使用cd确实有效。它似乎不起作用,因为pipenv run产生了一个新的外壳(与您运行的外壳不同pipenv run),并在那里运行您的命令。在那个单独的外壳中,它将cd进入文件夹......然后简单地退出。在您所做的原始外壳中pipenv run,您仍将位于同一文件夹中。

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

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$

脚本快捷方式生成了一个成功cd-ed 到的shell 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它不是它的预期目的。

于 2020-09-27T05:41:47.657 回答
0

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”。

于 2021-09-18T13:17:11.150 回答