#!/bin/bash log="$(portageq envvar PORTAGE_TMPDIR)/portage/*/*/temp/build.log" cmd="${SB:-tail -f}" c=0 die() { echo -e "$*" >&2; exit 1; } if [[ $1 = -h || $1 = --help ]]; then echo "Script to follow log of running portage builds" echo echo "Usage: ${0##*/} # see running builds" echo " ${0##*/} N # follow build #N" echo " ${0##*/} --fetch # follow emerge-fetch.log" echo " ${0##*/} --help # show this help" echo echo "Use environment variable SB to override the default cmd ($cmd)" elif [[ $1 = -f || $1 = --fetch ]]; then log="$(portageq envvar EMERGE_LOG_DIR)" log="${log:=$(portageq envvar EPREFIX)/var/log}/emerge-fetch.log" [[ -f $log ]] || die "Could open '$log'" exec $cmd $log elif [[ $(echo $log) = "$log" ]]; then echo "No running build found (try '${0##*/} --help')" elif [[ ! $1 ]]; then echo "Running builds - use '${0##*/} NUMBER' to select" for i in $log; do [[ $i =~ ^${log%%\**}([^/]*)/([^/]*)${log##*\*}$ ]] || continue echo -e "$((++c))\t${BASH_REMATCH[2]}\t(${BASH_REMATCH[1]})" done else [[ -z ${1//[0-9]} && $1 -gt 0 ]] || die "Argument should be a number greater 0" for i in $log; do [[ $i =~ ^${log%%\**}([^/]*)/([^/]*)${log##*\*}$ ]] || continue [[ $((++c)) -eq $((10#$1)) ]] || continue [[ -f ${i} ]] || die "Build number $1 was gone in the meanwhile" echo -ne "\033]0;Viewing: ${BASH_REMATCH[2]}\t(${BASH_REMATCH[1]})\007" exec $cmd $i done die "Build number $1 not found (there are only $((c--)) build(s) running)" fi