如何在 Pipfile 的 [脚本] 中执行 运行 "cd" 命令?
How to run "cd" command in a Pipfile's [script]?
我需要在 Pipfile 中做这样的事情:
...
[scripts]
my_script = "cd folder"
...
使用cd
确实有效。它只是 似乎 不起作用,因为 pipenv run
产生了一个新的 shell (与你 运行 [=13 的 shell 不同=]), 运行 那里是你的 command/s。在那个单独的 shell 中,它将 cd
到文件夹...然后简单地退出。在您 pipenv run
的原始 shell 中,您仍将位于同一文件夹中。
您可以检查它是否可以正确访问该文件夹:
Whosebug$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── ...
Whosebug$ 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'"
Whosebug$ pipenv run my_script
file1.txt file2.txt file3.txt
Whosebug$
脚本快捷方式产生了一个 shell,它成功地 cd
-ed 进入了 folder
,但是在原来的 shell 中,你仍然 在同一目录中(在本例中为“Whosebug”)。
现在,我不知道创建 cd
到文件夹的快捷方式的预期目的是什么。我认为这不是 my_script
的唯一命令,因为 cd folder
比 pipenv run my_script
.
更简单
如果您要在该文件夹中执行一些操作 operation/s,那么我建议您为所有其他命令编写一个单独的脚本,并使用 [scripts]
快捷方式调用该脚本。
Whosebug$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── scripts
└── my_script.sh
Whosebug$ cat my_script.sh
#!/bin/bash
cd folder
for file in *
do
echo "Doing something to $file"
sleep 3
done
echo "Done."
Whosebug$ cat Pipfile
...
[scripts]
my_script = "./scripts/my_script.sh"
Whosebug$ pipenv run my_script
Doing something to file1.txt
Doing something to file2.txt
Doing something to file3.txt
Done.
[script]
快捷方式 仍然 可以正常工作(即 cd
进入文件夹并在那里执行操作)。它也比链接命令更好,pipenv
维护者已经讨论过这不是它的预期目的。
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'。
我需要在 Pipfile 中做这样的事情:
...
[scripts]
my_script = "cd folder"
...
使用cd
确实有效。它只是 似乎 不起作用,因为 pipenv run
产生了一个新的 shell (与你 运行 [=13 的 shell 不同=]), 运行 那里是你的 command/s。在那个单独的 shell 中,它将 cd
到文件夹...然后简单地退出。在您 pipenv run
的原始 shell 中,您仍将位于同一文件夹中。
您可以检查它是否可以正确访问该文件夹:
Whosebug$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── ...
Whosebug$ 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'"
Whosebug$ pipenv run my_script
file1.txt file2.txt file3.txt
Whosebug$
脚本快捷方式产生了一个 shell,它成功地 cd
-ed 进入了 folder
,但是在原来的 shell 中,你仍然 在同一目录中(在本例中为“Whosebug”)。
现在,我不知道创建 cd
到文件夹的快捷方式的预期目的是什么。我认为这不是 my_script
的唯一命令,因为 cd folder
比 pipenv run my_script
.
如果您要在该文件夹中执行一些操作 operation/s,那么我建议您为所有其他命令编写一个单独的脚本,并使用 [scripts]
快捷方式调用该脚本。
Whosebug$ tree -L 2 .
.
├── Pipfile
├── Pipfile.lock
├── folder
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── scripts
└── my_script.sh
Whosebug$ cat my_script.sh
#!/bin/bash
cd folder
for file in *
do
echo "Doing something to $file"
sleep 3
done
echo "Done."
Whosebug$ cat Pipfile
...
[scripts]
my_script = "./scripts/my_script.sh"
Whosebug$ pipenv run my_script
Doing something to file1.txt
Doing something to file2.txt
Doing something to file3.txt
Done.
[script]
快捷方式 仍然 可以正常工作(即 cd
进入文件夹并在那里执行操作)。它也比链接命令更好,pipenv
维护者已经讨论过这不是它的预期目的。
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'。