BASH:如何发送params&数据到STDIN上的进程

时间:2011-07-08 08:49:08

标签: 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
> lots_of_post_data
> <User types ctrl-d>
> <User types ctrl-d>

现在......我正在尝试用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

3 个答案:

答案 0 :(得分:3)

啊哈!这是一个卷曲特定的解决方案。

您传递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 -

答案 1 :(得分:2)

使用“此处文档”:

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

答案 2 :(得分:0)

无法像终端中的Ctrl-D一样模拟EOF,以便完全停止向流发送数据。您可能需要找到一种不同的方法来完成此操作,可能是通过使用功能更强大的语言编写脚本。