#!/usr/bin/env bash # # setup.sh — o que https://get.savemed.com.br devolve. # # sudo bash -c "$(curl -fsSL get.savemed.com.br)" # menu # sudo bash -c "$(curl -fsSL get.savemed.com.br)" _ atualizar # sem menu # # NÃO use `sudo bash <(curl ...)`: o sudo fecha os descritores herdados e o bash # falha com "/dev/fd/63: No such file or directory" (testado no Ubuntu 24.04). # Com -c o script inteiro chega antes de executar e o teclado fica livre para as # perguntas do menu. # # Curto de propósito: confere root, instala o mínimo para baixar com segurança, # baixa o savemed.sh, confere o sha256 contra o SHA256SUMS publicado junto e # só então executa. Todo o resto mora no savemed.sh. # # Tudo dentro de main(), chamado na última linha: download cortado no meio não # executa metade do script. set -euo pipefail main() { local base="${SAVEMED_GET_URL:-https://get.savemed.com.br}" local tmp if [[ "${EUID}" -ne 0 ]]; then printf 'Rode como root:\n %s\n' 'sudo bash -c "$(curl -fsSL get.savemed.com.br)"' >&2 exit 1 fi if ! command -v curl >/dev/null 2>&1 || ! command -v sha256sum >/dev/null 2>&1; then DEBIAN_FRONTEND=noninteractive apt-get update -qq >/dev/null DEBIAN_FRONTEND=noninteractive apt-get install -y -qq curl ca-certificates coreutils >/dev/null fi tmp="$(mktemp -d)" # Aspas duplas: o caminho entra no trap agora. Com aspas simples o trap lia "${tmp}" # na saída do script, quando o local de main() já não existe — e o set -u abortava. trap "rm -rf -- '${tmp}'" EXIT curl -fsSL --retry 3 "${base}/SHA256SUMS" -o "${tmp}/SHA256SUMS" curl -fsSL --retry 3 "${base}/savemed.sh" -o "${tmp}/savemed.sh" if ! (cd "${tmp}" && grep ' savemed.sh$' SHA256SUMS | sha256sum -c --quiet); then printf 'savemed.sh não confere com o SHA256SUMS de %s. Nada foi executado.\n' "${base}" >&2 exit 1 fi bash "${tmp}/savemed.sh" "$@" } main "$@"