Как включить переменные оболочки из пользователя в сценарий оболочки? [Дубликат]

Если вы хотите, чтобы сервер MySQL решал набор символов, а не PHP как клиент (старое поведение, предпочтительнее, на мой взгляд), попробуйте добавить skip-character-set-client-handshake к вашему my.cnf в [mysqld] и перезапустить mysql.

Это может вызвать проблемы, если вы используете что-либо, кроме UTF8.

101
задан AGleasonTU 10 June 2013 в 18:52
поделиться

5 ответов

181
ответ дан Michael Le Barbier Grünewald 25 August 2018 в 14:38
поделиться

Curl может отправлять двоичные данные из файла, поэтому я использую замену процессов и пользуюсь файловыми дескрипторами всякий раз, когда мне нужно публиковать что-то неприятное с завитом и по-прежнему хочу получить доступ к vars в текущей оболочке. Что-то вроде:

curl "http://localhost:8080" \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
--data @<(cat <<EOF
{
  "me": "$USER",
  "something": $(date +%s)
  }
EOF
)

Это выглядит как --data @/dev/fd/<some number>, который просто обрабатывается как обычный файл. В любом случае, если вы хотите, чтобы он работал локально, сначала запускайте nc -l 8080, а в другой оболочке выходите из этой команды. Вы увидите что-то вроде:

POST / HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.43.0
Accept: application/json
Content-Type:application/json
Content-Length: 43

{  "me": "username",  "something": 1465057519  }

Как вы можете видеть, вы можете вызывать подсечки и еще что-то вроде эталонных варов в heredoc. Счастливая хакерская надежда это помогает с '"'"'""""'''""''.

17
ответ дан Che Ruisi-Besares 25 August 2018 в 14:38
поделиться

Несколько лет спустя, но это может помочь кому-то, если вы используете замену eval или backtick:

postDataJson="{\"guid\":\"$guid\",\"auth_token\":\"$token\"}"

Использование sed для разделения кавычек с начала и конца ответа

$(curl --silent -H "Content-Type: application/json" https://${target_host}/runs/get-work -d ${postDataJson} | sed -e 's/^"//' -e 's/"$//')
2
ответ дан glyph 25 August 2018 в 14:38
поделиться

Решение проверено с помощью https://httpbin.org/ и встроенного сценария bash 1. Для переменных без пробелов в нем, т.е. 1: просто добавьте ' до и после $variable, когда заменяя нужную строку

for i in {1..3}; do \
  curl -X POST -H "Content-Type: application/json" -d \
    '{"number":"'$i'"}' "https://httpbin.org/post"; \
done

2. Для ввода с пробелами: переменная Wrap с дополнительным ", то есть "el a":

declare -a arr=("el a" "el b" "el c"); for i in "${arr[@]}"; do \
  curl -X POST -H "Content-Type: application/json" -d \
    '{"elem":"'"$i"'"}' "https://httpbin.org/post"; \
done

Wow works :)

43
ответ дан pbaranski 25 August 2018 в 14:38
поделиться
  • информация от сэра Атоса отлично работала !!

Вот как мне пришлось использовать его в моем скрипке curl для couchDB. Это очень помогло. Спасибо!

bin/curl -X PUT "db_domain_name_:5984/_config/vhosts/$1.couchdb" -d '"/'"$1"'/"' --user "admin:*****"
3
ответ дан thargenediad 25 August 2018 в 14:38
поделиться