Mercurial > hg > aboriginal
view sources/utility_functions.sh @ 930:61aa2ac67660
Script to caclulate unstable linux miniconfig from stable linux miniconfig, using make oldconfig.
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 11 Dec 2009 00:21:46 -0600 |
parents | 8b69eeb17ebf |
children | 7dd3fb4dd333 |
line wrap: on
line source
#!/bin/echo "This file is sourced, not run" # This file contains generic functions, presumably reusable in other contexts. # Create a blank directory at first argument, deleting existing contents if any blank_tempdir() { # sanity test: never rm -rf something we don't own. [ -z "$1" ] && dienow touch -c "$1" || dienow # Delete old directory, create new one. rm -rf "$1" mkdir -p "$1" || dienow } # output the sha1sum of a file function sha1file() { sha1sum "$@" | awk '{print $1}' } # dienow() is an exit function that works properly even from a subshell. # (actually_dienow is run in the parent shell via signal handler.) actually_dienow() { echo -e "\n\e[31mExiting due to errors ($ARCH_NAME $STAGE_NAME $PACKAGE)\e[0m" exit 1 } trap actually_dienow SIGUSR1 TOPSHELL=$$ dienow() { kill -USR1 $TOPSHELL exit 1 } # Turn a bunch of output lines into a much quieter series of periods, # roughly one per screenfull dotprogress() { x=0 while read i do x=$[$x + 1] if [[ "$x" -eq 25 ]] then x=0 echo -n . fi done echo } # Set the title bar of the current xterm set_titlebar() { [ -z "$NO_TITLE_BAR" ] && echo -en "\033]2;$1\007" } # Filter out unnecessary noise, keeping just lines starting with "===" maybe_quiet() { [ -z "$QUIET" ] && cat || grep "^===" } # Run a command background if FORK is set, in foreground otherwise maybe_fork() { if [ -z "$FORK" ] then eval "$*" else eval "$*" & fi } # Kill a process and all its decendants killtree() { local KIDS="" while [ $# -ne 0 ] do KIDS="$KIDS $(pgrep -P$1)" shift done KIDS="$(echo -n $KIDS)" if [ ! -z "$KIDS" ] then # Depth first kill avoids reparent_to_init hiding stuff. killtree $KIDS kill $KIDS 2>/dev/null fi } # Search a colon-separated path for files matching a pattern. # Arguments are 1) path to search, 2) pattern, 3) command to run on each file. # During command, $DIR/$FILE points to file found. path_search() { # For each each $PATH element, loop through each file in that directory, # and create a symlink to the wrapper with that name. In the case of # duplicates, keep the first one. echo "$1" | sed 's/:/\n/g' | while read DIR do find "$DIR" -maxdepth 1 -mindepth 1 -name "$2" | sed 's@.*/@@' | \ while read FILE do eval "$3" # Output is verbose. Pipe it to dotprogress. echo $FILE done done }