message: rpc: Input-from-stdin mode for bitcoin-cli
  Implements by adding an option `-stdin` which reads
  additional arguments from stdin, one per line.
  For example
  ```bash
  echo -e "mysecretcode\n120" | src/bitcoin-cli -stdin walletpassphrase
  echo -e "walletpassphrase\nmysecretcode\n120" | src/bitcoin-cli -stdin
  ```
diff: @@ -48,6 +48,7 @@ std::string HelpMessageCli()
  strUsage += HelpMessageOpt("-rpcuser=<user>", _("Username for JSON-RPC connections"));
  strUsage += HelpMessageOpt("-rpcpassword=<pw>", _("Password for JSON-RPC connections"));
  strUsage += HelpMessageOpt("-rpcclienttimeout=<n>", strprintf(_("Timeout during HTTP requests (default: %d)"), DEFAULT_HTTP_CLIENT_TIMEOUT));
  + strUsage += HelpMessageOpt("-stdin", _("Read extra arguments from standard input, one per line until EOF/Ctrl-D (recommended for sensitive information such as passphrases)"));
  return strUsage;
  }
  @@ -238,15 +239,17 @@ int CommandLineRPC(int argc, char *argv[])
  argc--;
  argv++;
  }
  -
  - // Method
  - if (argc < 2)
  - throw runtime_error("too few parameters");
  - string strMethod = argv[1];
  -
  - // Parameters default to strings
  - std::vector<std::string> strParams(&argv[2], &argv[argc]);
  - UniValue params = RPCConvertValues(strMethod, strParams);
  + std::vector<std::string> args = std::vector<std::string>(&argv[1], &argv[argc]);
  + if (GetBoolArg("-stdin", false)) {
  + // Read one arg per line from stdin and append
  + std::string line;
  + while (std::getline(std::cin,line))
  + args.push_back(line);
  + }
  + if (args.size() < 1)
  + throw runtime_error("too few parameters (need at least command)");
  + std::string strMethod = args[0];
  + UniValue params = RPCConvertValues(strMethod, std::vector<std::string>(args.begin()+1, args.end()));
  // Execute and handle connection failures with -rpcwait
  const bool fWait = GetBoolArg("-rpcwait", false);
  