BASH:如何将参数和数据发送到STDIN上的进程

我正在编写一个调用curl的函数,可以通过STDINinput密码和参数(保持密码不在cmd行)。

我还需要在STDIN上发送POST数据(大量数据不适合cmd行)。

所以,从命令行我可以通过以下方式成功完成:

> curl -K --data-binary @- -other_non-pw_params > -u "username:password" > <User types ctrl-d> > lots_of_post_data > lots_of_post_data > <User types ctrl-d> > <User types ctrl-d> 

现在…我试图在BASH脚本中做到这一点…

Psudo-code:

 { echo '-u "username:password"' echo <ctrl-d> | cat dev/null | ^D echo lots_of_post_data echo lots_of_post_data } | curl -K --data-binary @- -other_non-pw_params 

啊哈! 这有一个特定的解决方案。

你传递所有的参数在STDIN上,并且把–data-binary @ – (或者等价的)放到最后,然后把所有的参数作为数据输入。 示例脚本:

 #!/bin/bash { echo '--basic' echo '--compress' echo '--url "https://your_website"' echo '-u "username:password"' echo '--data-binary @-' echo 'lots_of_post_data' echo 'lots_of_post_data' } | curl --config - 

使用“这里的文件”:

 curl --config - <<EOF --basic ... EOF 

没有办法像在Ctrl-D中一样在终端中模拟一个EOF保存到停止发送数据到流中。 你需要找到一个不同的方式来完成这个任务,也许可以通过编写一个更强大的语言脚本。