我刚刚为朋友和家人制作了一个rickroll恶作剧。我希望能够使用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
答案 0 :(得分:1)
扩展我的评论。
有几种方法可以使用大多数shell语言来链接命令(这里我假设使用sh / bash方言)。
;
将按顺序运行每个命令,在前一个命令完成时启动下一个命令。&&
作为;
,但只要命令返回错误(任何非0 return code)就会中止链。||
作为&&
,但只要命令成功就中止链(返回0)。你在这里尝试做的不是那些,而是piping。由|
触发,它会导致其侧面的命令立即运行,左侧的命令被输入到右侧的标准输入。
你的第二个例子也不起作用,因为它导致两个序列并行运行:
curl
,一旦完成,就会跟着sleep
。python
命令,与第一个重定向的序列所写的任何内容同时运行。所以修复它:command1 && command2
,将运行curl
,等待它完成,只有python
成功才能运行curl
。
同样,您可以使用您的示例来说明运行一个人无法完全理解的命令有多么有害。让你的脚本用红色写下“你的所有文件都已被删除”,它可以很好地教育那些人。