BASH: как отправить параметры и данные в процесс на STDIN - PullRequest
2 голосов
/ 08 июля 2011

Я пишу сценарий вызова curl, вы можете ввести пароль и параметры через STDIN (не указывать пароль в строке cmd).

Мне также нужно отправить данные POST на STDIN (большой объем данных, который не помещается в строку 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-скрипте ...

Псудокод с желаемым мышлением:

{ 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 ]

3 голосов
/ 08 июля 2011

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 -
2 голосов
/ 08 июля 2011

Используйте «здесь документ»:

curl --config - <<EOF
--basic
...
EOF
0 голосов
/ 08 июля 2011

Нет способа имитировать EOF, как в Ctrl-D в терминале, чтобы полностью прекратить отправку данных в поток. Вам нужно будет найти другой способ сделать это, возможно, написав скрипт на более способном языке.

...