我正在编写一个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
答案 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,以便完全停止向流发送数据。您可能需要找到一种不同的方法来完成此操作,可能是通过使用功能更强大的语言编写脚本。