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

Linux BASH:如何发送参数&;将数据发送到STDIN上的进程,linux,bash,shell,curl,password-protection,Linux,Bash,Shell,Curl,Password Protection,我正在编写一个对curl的调用脚本,您可以通过STDIN输入密码和参数(将密码保留在cmd行之外) 我还需要在STDIN上发送POST数据(大量数据不适合cmd行) 因此,在命令行中,我可以通过以下方式成功完成此操作: > curl -K --data-binary @- -other_non-pw_params > -u "username:password" > <User types ctrl-d> > lots_of_post_data > lo

我正在编写一个对curl的调用脚本,您可以通过STDIN输入密码和参数(将密码保留在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>
>curl-K——数据二进制——其他非pw参数
>-u“用户名:密码”
> 
>大量的后期数据
>大量的后期数据
> 
> 
现在。。。我正试图在BASH脚本中实现这一点

一厢情愿的Psudo代码:

{ 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
{echo'-u“用户名:密码”'
回显| cat dev/null | ^D
回显大量的\u后\u数据
回显大量的\u后\u数据
}| curl-K--数据二进制@--其他非pw参数

无法像终端保存中的Ctrl-D那样模拟EOF,从而完全停止向流发送数据。您需要找到一种不同的方法来实现这一点,也许可以用一种功能更强的语言编写脚本。

Aha!对于这个问题,有一个特定于旋度的解决方案

您在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-你已经不远了。。。我想你需要改变的是正确的转义序列,等等。你试过了吗?不知道我会用什么转义序列。echo手册页会告诉你它支持哪些转义序列。但我认为Ignacio的答案是正确的——Bash无法“关闭”STDOUT,这正是您真正需要的。如果需要发送Ctrl-D/EOF,您可能需要比shell脚本更复杂的东西。好主意,但是如果将“echo'lots_of_post_data'”这两行替换为循环来填充数据,这是否有效?啊,不。在这种情况下,您的解决方案会更好。
curl --config - <<EOF
--basic
...
EOF