【发布时间】:2017-01-27 21:49:18
【问题描述】:
我有两个用 Ruby 编写的实用程序。第一个实用程序的目的没有别的,只是从 http 链接读取文件,并将其内容转储到 STDOUT,与 cURL 非常相似,我们称之为“mycurl”:
mycurl http://example.com/file123.txt
第二个实用程序什么也不做,只是将其 STDIN 上传到 FTP 服务器并将内容写入具有给定名称的文件中,我们称之为“myput”。 FTP 服务器名称和其他选项是硬编码的,因此不需要其他选项,只需要远程服务器上的文件名。这两个实用程序通过管道将第一个命令 (mycurl) 的 STDOUT 传送到第二个实用程序 (myput) 的 STDIN 来协同工作:
mycurl http://example.com/file123.txt | myput file123.txt
它们是独立的实用程序,因为我经常将它们与其他命令一起使用。我的问题是,“mycurl”可以从 URL 确定文件名,但我仍然必须将此选项传递给第二个命令。如果第一个命令可以以某种方式通过管道或通过任何其他方法将该文件名传递给第二个命令,那会更方便,我只能写这个:
mycurl http://example.com/file123.txt | myput
我怎样才能做到这一点?有可能吗?
【问题讨论】:
-
为什么不将
myput的第一行输入作为文件名呢?或者甚至让它成为可选的:即如果你调用myput(甚至myput -),那么它将从第一行读取文件名,否则它会期望一个参数。 -
您可以考虑更新
mycurl以将程序名称作为参数,例如mycurl http://example.com/file123.txt -x myput。这样mycurl可以在 argv[1] 中调用myput和file123.txt,并将 HTTP 响应通过管道传输到其标准输入中。
标签: bash curl ftp pipe parameter-passing