我刚刚创建了一个 rickroll 恶作剧,供 friend 和家人玩。我希望能够使用有效的curl 命令从github 下载文件。我的问题是,当我使用管道并尝试执行脚本时,它会在执行 curl 之后、下载文件之前立即执行。
这是我尝试运行的命令:
curl -L -O https://raw.githubusercontent.com/krish-penumarty/RickRollPrank/master/rickroll.py | python rickroll.py
我也尝试使用 sleep 命令来运行它,但没有任何运气。
(curl -L -O https://raw.githubusercontent.com/krish-penumarty/RickRollPrank/master/rickroll.py; sleep 10) | python rickroll.py
最佳答案
扩展我的评论。
有多种方法可以使用大多数 shell 语言来链接命令(这里我假设使用 sh/bash 方言)。
- 最基本的:
;
只会按顺序运行每个命令,在上一个命令完成后开始下一个命令。 - 条件链接,
&&
的工作方式与;
相同,但一旦命令返回错误(任何非 0 return code ),就会中止链接。 - 条件链接,
||
的工作方式与&&
相同,但一旦命令成功就会中止链接(返回 0)。
你在这里尝试做的都不是这些,而是 piping 。由 |
触发,它会导致其两侧的命令同时运行,左侧命令的标准输出被输入到右侧命令的标准输入中。
您的第二个示例也不起作用,因为它会导致两个序列并行运行:
- 第一个序列是
curl
,完成后接着是sleep
。 - 第二个序列是
python
命令,与重定向为其输入的第一个序列写入的任何内容同时运行。
所以修复它:command1 && command2
,将运行curl
,等待它完成,并且仅在curl
成功时运行python
。
再说一次,您可以使用示例来说明运行不完全理解的命令会造成多大的危害。让您的脚本用红色写“您的所有文件已被删除”,这对于教育人们有关该主题的知识很有帮助。
关于python - 在curl下载python脚本时添加延迟,然后通过管道执行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39129116/