Вставка строк в многострочную команду, используя для l oop в сценарии bash - PullRequest
0 голосов
/ 07 марта 2020

У меня есть сценарий bash, который выполняет многострочную команду несколько раз, и я меняю некоторые значения на каждой итерации. Вот мой код ниже:

for (( peer=1; peer<=$nodesNum;peer++ ))
do  
   echo "Starting peer $peer"

nodeos -p eosio -d /eosio_data/node$peer --config-dir /eosio_data/node$peer --http-server-address=127.0.0.1:$http  \
--p2p-listen-endpoint=127.0.0.1:$p2p --access-control-allow-origin=* \
-p "user$peer" --http-validate-host=false --signature-provider=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3  \
 --max-transaction-time=1000 --genesis-json /eosio_data/genesis.json --wasm-runtime=wabt --max-clients=2000 -e  \
--plugin eosio::chain_plugin --plugin eosio::producer_plugin --plugin eosio::producer_api_plugin  \
 --plugin eosio::chain_api_plugin \
--p2p-peer-address localhost:8888 \
 &>eosio_data/logs/nodeos_stderr$p2p.log &   \
sleep 1
http=$((http+1))
p2p=$((p2p+1))
done

Мне нужно добавить команду --p2p-peer-address localhost: $ ((9010 + $ peer)) несколько раз для каждого пира в качестве части командная строка. Я новичок в bash сценариях и не могу найти похожий пример.

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Я думаю, вы были очень близки. Созданное вами выражение --p2p-peer-address localhost:$((9010 + $peer)) может быть вставлено в ваш вызов nodeos следующим образом:

for (( peer=1; peer<=$nodesNum;peer++ ))
do  
   echo "Starting peer $peer"

  nodeos -p eosio -d /eosio_data/node$peer \
   --config-dir /eosio_data/node$peer \
   --http-server-address=127.0.0.1:$http  \
   --p2p-listen-endpoint=127.0.0.1:$p2p \
   --access-control-allow-origin=* \
   -p "user$peer" \
   --http-validate-host=false \
   --signature-provider=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3  \
   --max-transaction-time=1000 --genesis-json /eosio_data/genesis.json --wasm-runtime=wabt --max-clients=2000 -e  \
   --plugin eosio::chain_plugin --plugin eosio::producer_plugin --plugin eosio::producer_api_plugin  \
   --plugin eosio::chain_api_plugin \
   --p2p-peer-address localhost:$((9010 + $peer)) &>eosio_data/logs/nodeos_stderr$p2p.log & 

  sleep 1
  http=$((http+1))
  p2p=$((p2p+1))
done
0 голосов
/ 07 марта 2020

Не совсем понятно, что вам нужно, но я думаю, что-то вроде следующего. Создается массив --p2p-peer-address параметров, которые затем включаются в более широкий набор общих параметров. Каждый вызов nodeos затем имеет некоторые параметры c, определяемые равноправным узлом, в дополнение к общим параметрам.

# for example
HTTP_BASE=8080
P2P_BASE=12345

# Set of --p2p-peer-address options for shared by all calls.
for ((peer=1; peer <= $nodesNum; peer++)); do 
    peer_args+=( 
      --p2p-peer-address
      localhost:$((9010+$peer)) 
    )
done

# These are the same for all calls
fixed_args=(
    -p eosio
    "--access-control-allow-origin=*"
    --http-validate-host=false
    --signature-provider=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
    --max-transaction-time=1000
    --genesis-json /eosio_data/genesis.json
    --wasm-runtime=wabt
    --max-clients=2000
    -e
    --plugin eosio::chain_plugin
    --plugin eosio::producer_plugin
    --plugin eosio::producer_api_plugin
    --plugin eosio::chain_api_plugin
    --p2p-peer-address localhost:8888
    "${peer_args[@]}"
)

for ((peer=1; peer<=$nodesNum; peer++)); do
    # Call-specific arguments, followed by common arguments.
    # $peer is either incorporated into each argument value
    nodeos -d /eosio_data/node$peer \
           --config-dir /eosio_data/node$peer \
           --http-server-address=127.0.0.1:$((HTTP_BASE + $peer)) \
           --p2p-listen-endpoint=127.0.0.1:$((P2P_BASE + $peer)) \
           -p "user$peer" \
           "${fixed_args[@]}" \
           &> eosio_data/logs/nodeos_stderr$((P2P_BASE + $peer)).log & 
    sleep 1
done

Чтобы каждый экземпляр nodeos не пытался подключиться к себе, построить peer_args заново на каждой итерации l oop. Удалите "${peer_args[@]}" из определения fixed_args, затем настройте основной l oop следующим образом:

for ((peer=1; peer <= $nodesNum; peer++)); do
    peer_args=()
    for ((neighbor=1; neighbor <= $nodesNum; neighbor++)); do
        (( neighbor == peer )) && continue
        peer_args+=( --p2p-peer-address localhost:$((9010+peer)) )
    done

    nodeos -d /eosio_data/node$peer \
           --config-dir /eosio_data/node$peer \
           --http-server-address=127.0.0.1:$((HTTP_BASE + $peer)) \
           --p2p-listen-endpoint=127.0.0.1:$((P2P_BASE + $peer)) \
           -p "user$peer" \
           "${fixed_args[@]}" \
           "${peer_args[@]}" \
           &> eosio_data/logs/nodeos_stderr$((P2P_BASE + $peer)).log & 
     sleep 1
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...