#!/usr/bin/env bash # Evomedia.net Token Savers — https://github.com/kellymichels/zscripts-token-savers # Created by Kelly Michels · dev@evomedia.net # Licensed under the MIT License. See LICENSE. # # zkill — stop local dev-server listeners for a project (bash port of ZKillOnly.ps1). # # Usage: # zkill [ ...] [--port N] [--kill-all] set -uo pipefail source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/zhelpers.sh" z_track_start "$@" z_need_config z_require lsof projects=(); port_override=0; kill_all=0 while [ $# -gt 0 ]; do case "$1" in -p|--port) port_override="${2:-0}"; shift 2 ;; --kill-all) kill_all=1; shift ;; --) shift; break ;; -*) err "Unknown option: $1"; exit 1 ;; *) projects+=("$1"); shift ;; esac done if [ "${#projects[@]}" -eq 0 ]; then warn "Usage: zkill [ ...] [--port N] [--kill-all]" dim " Projects in zconfig.json: $(zproj_csv)" exit 1 fi # --kill-all (kill stray project processes beyond the dev-port listener) isn't # ported yet; announce it rather than silently accepting the flag and doing nothing. [ "$kill_all" -eq 1 ] && warn "Note: --kill-all isn't implemented in the bash port yet - killing dev-port listeners only." for key in "${projects[@]}"; do zproj_require "$key" label="$(zproj "$key" .label)"; [ -n "$label" ] || label="$key" if [ "$port_override" -gt 0 ] 2>/dev/null; then port="$port_override" else port="$(zproj "$key" .ports.dev)" fi printf '\n'; info "=== zkill ($label) ===" if [[ "$port" =~ ^[0-9]+$ ]] && [ "$port" -gt 0 ]; then dim "Port: $port" killed="$(kill_listeners "$port")" else warn "No dev port configured for '$key' - skipping port kill." killed=0 fi # TODO (parity with ZKillOnly.ps1 -KillAll): also stop stray project processes. if [ "${killed:-0}" -gt 0 ]; then note " $killed process(es) stopped" else ok " Nothing to kill" fi done printf '\n'; info "Kill complete."