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

我需要在Pipfile中进行如下操作:

...
[scripts]
my_script = "cd folder"
...
iCMS 回答:如何在Pipfile的[脚本]中运行“ cd”命令?

实际上可以使用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$

该脚本快捷方式产生了一个成功cd编辑到folder的shell,但是在原始shell中,您仍然 still 在同一目录(“ StackOverflow”在这种情况下)。

现在,我不知道为cd创建进入文件夹的快捷方式的目的是什么。我认为这不是my_script的唯一命令,因为执行cd folderpipenv 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]快捷方式将 still 正常工作(即cd进入文件夹并在其中执行操作)。它也比链接命令更好,pipenv维护人员已经讨论过链接命令不是其预期目的。

本文链接:https://www.f2er.com/1749793.html

大家都在问