Добавление строки в оболочку [дубликат]

Если все остальное не удается, перекомпилируйте.

Недавно я смог избавиться от нерешенной внешней ошибки в Visual Studio 2012, просто перекомпилировав нарушивший файл. Когда я перестроил, ошибка исчезла.

Это обычно происходит, когда две (или более) библиотеки имеют циклическую зависимость. Библиотека A пытается использовать символы в B.lib и библиотеке B пытается использовать символы из A.lib. Ничего не существует для начала. Когда вы пытаетесь скомпилировать A, шаг ссылки завершится неудачно, потому что он не может найти B.lib. A.lib будет сгенерирован, но не будет dll. Затем вы компилируете B, который будет успешным и сгенерирует B.lib. Повторная компиляция A теперь будет работать, потому что теперь найден B.lib.

13
задан tzippy 29 January 2014 в 21:21
поделиться

3 ответа

Обновление: используйте более простой

request_body=$(cat <<EOF
{
  "jsonrpc": "2.0",
  "method": "Player.Open",
  "params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
)

, а не то, что я объясню ниже. Однако, если это опция, используйте jq для создания JSON. Это гарантирует, что значение $FILENAME будет правильно процитировано.

request_body=$(jq -n --arg fname "$FILENAME" '
{
  jsonrpc: "2.0",
  method: "Player.Open",
  params: {item: {file: $fname}}
}'

. Сначала было бы проще определить переменную с содержимым тела запроса:

#!/bin/bash
header="Content-Type: application/json"
FILENAME="/media/file.avi"
request_body=$(< <(cat <<EOF
{
  "jsonrpc": "2.0",
  "method": "Player.Open",
  "params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
))
curl -i -X POST -H "$header" -d "$request_body" http://192.167.0.13/jsonrpc
Это определение может потребовать объяснение для понимания, но обратите внимание на два больших преимущества:
  1. Вы удаляете уровень цитирования
  2. . Вы можете легко форматировать текст для удобочитаемости.
Сначала вы имеют простую подстановку команд, которая читает из файла:
$( < ... )   # bash improvement over $( cat ... )
Вместо имени файла, однако, вы указываете подстановку процесса, в которой вывод команды используется так, как если бы она была телом файла. Команда в подстановке процесса - это просто cat, которая читается из документа здесь. Это документ, который содержит ваш запрос.

20
ответ дан chepner 25 August 2018 в 14:27
поделиться

Вот еще один способ вставить данные из файла в свойство JSON.

Ниже приведен пример, который подготавливает данные JSON запроса, используемые для создания капли CoreOS в Digital Ocean: g2]

# Load the cloud config to variable
user_data=$(cat config/cloud-config)

# Prepare the request data 
request_data='{
  "name": "server name",
  "region": "fra1",
  "size": "512mb",
  "image": "coreos-stable",
  "backups": false,
  "ipv6": true,
  "user_data": "---this content will be replaced---",
  "ssh_keys": [1234, 2345]
}'

# Insert data from file into the user_data property
request_data=$(echo $request_data | jq ". + {user_data: \"$user_data\"}")
1
ответ дан czerasz 25 August 2018 в 14:27
поделиться

Мое предложение:

#!/bin/bash
FILENAME="/media/file 2.avi"
curl -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "Player.Open", "params":{"item":{"file":"'"$FILENAME"'"}}}' http://192.167.0.13/jsonrpc

Различия - дефис в -d (вместо тире) и двойные кавычки вокруг $FILENAME.

7
ответ дан Hln 25 August 2018 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: