943 B47 lines
Blame
1#!/usr/bin/env bash
2set -euo pipefail
3
4HOSTS_FILE="${HOSTS_FILE:-/etc/hosts}"
5HOSTS=(
6 "grove.test"
7 "canopy.grove.test"
8 "ring.grove.test"
9 "collab.grove.test"
10)
11
12if [[ ! -f "$HOSTS_FILE" ]]; then
13 echo "Hosts file not found: $HOSTS_FILE" >&2
14 exit 1
15fi
16
17missing=()
18for host in "${HOSTS[@]}"; do
19 pattern="(^|[[:space:]])${host//./\\.}([[:space:]]|$)"
20 if ! grep -Eq "$pattern" "$HOSTS_FILE"; then
21 missing+=("$host")
22 fi
23done
24
25if [[ ${#missing[@]} -eq 0 ]]; then
26 exit 0
27fi
28
29lines=""
30for host in "${missing[@]}"; do
31 lines+="127.0.0.1 ${host}"$'\n'
32done
33
34echo "Adding local host aliases to ${HOSTS_FILE}: ${missing[*]}"
35
36if [[ "$HOSTS_FILE" != "/etc/hosts" || -w "$HOSTS_FILE" ]]; then
37 printf "%s" "$lines" >> "$HOSTS_FILE"
38 exit 0
39fi
40
41if ! printf "%s" "$lines" | sudo tee -a /etc/hosts >/dev/null; then
42 echo "Failed to update /etc/hosts." >&2
43 echo "Add these lines manually:" >&2
44 printf "%s" "$lines" >&2
45 exit 1
46fi
47