#sed #blockchain
#sed #блокчейн
Вопрос:
sed -i 's|from_infura_hex=?|from_infura_hex=$(curl -s -X POST --connect-timeout 5 -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' https://ropsten.infura.io/X/X | jq .result | xargs)|' /home/ec2-user/LastBlockNode.sh
Я пытался выполнить эту команду, но я всегда получаю эту ошибку:
-bash: синтаксическая ошибка рядом с неожиданным токеном `)’
Цель этой команды — изменить значение from_infura_hex=?
в скрипте LastBlockNode.sh по команде curl.
Кто-нибудь может помочь с этой командой sed?
Ответ №1:
- Если вы выберете символ канала
|
в качестве разделителя дляs
команды, символ не должен появляться в шаблоне или замене без экранирования. Поскольку вы используете|
в своей команде конвейер, лучше выбрать другой символ, например#
. - Вы не можете заключать одинарные кавычки, даже если вы экранируете их обратной косой чертой.
- Чтобы использовать подстановку команды внутри замены, вам нужно сказать
sed -i '/pattern/'"$(command)"'/'
, нетsed -i '/pattern/$(command)/'
.
Тогда, пожалуйста, попробуйте что-то вроде:
sed -i 's#from_infura_hex=?#from_infura_hex='"$(curl -s -X POST --connect-timeout 5 -H "Content-Type: application/json" --data "{"jsonrpc":"2.0","method":
"eth_blockNumber","params":[],"id":1}" https://ropsten.infura.io/X/X | jq .result | xargs)"'#' /home/ec2-user/LastBlockNode.sh
Но будет безопаснее и удобнее разбить команду на
несколько строк:
replacement="$(curl -s -X POST --connect-timeout 5 -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' https://ropsten.infura.io/X/X | jq .result | xargs)"
sed -i 's#from_infura_hex=?#from_infura_hex='"$replacement"'#' /home/ec2-user/LastBlockNode.sh
Пожалуйста, обратите внимание, что я не тестировал приведенные выше команды с фактическими данными.
Если какой-либо из них по-прежнему не работает, пожалуйста, сообщите мне об этом с сообщением об ошибке.
Комментарии:
1. Спасибо за ваш ответ, я попробовал два решения, которые вы мне даете, но в обоих из них замена переменной будет равна нулю, как показано ниже. Значение будет отображаться в файле следующим образом я пытался даже изменить некоторые цитаты, но мне это не удалось. from_infura_hex=null
2. Спасибо за отзыв. Это будет легче отлаживать со 2-м подходом. Сначала, пожалуйста, выполните
echo "$replacement"
, чтобы увидеть, что присвоено переменной. Если оно пустое, илиnull
затем выполните команду между"$(
и)"
, что означает отcurl
доxargs
. Пожалуйста, внимательно скопируйте и вставьте командную строку, не изменяя кавычки. Если на выходе все еще есть проблема, удалите конвейер| jq .result | xargs
и проверьте вывод. Удачи.