Als Ergänzung zum Thema Unterordner in /usr/local/bin möchten wir uns mit dem Befehl source und in diesem Zusammenhang auch mit Libraries und Binaries befassen.
Wenn man eine Funktion in ein Skript baut, z.B. um Ausgaben auf stdout einzufärben und man möchte diese Funktion gerne als Vorlage in einem anderen Skript nutzen, dann kann man das mittels source machen. Dazu nehmen wir diesen Code hier als Basis:
#!/bin/bash
# Defines colors to use in other scripts.
# --- helper to convert hex to TrueColor ANSI ---
_hex2rgb() {
local hex="${1#\#}"
printf "%d;%d;%d" \
$((16#${hex:0:2})) \
$((16#${hex:2:2})) \
$((16#${hex:4:2}))
}
# create ANSI escape for hex foreground
fghex() {
local rgb=$(_hex2rgb "$1")
echo -e "\e[38;2;${rgb}m${2}\e[0m"
}
# create ANSI escape for hex background
bghex() {
local rgb=$(_hex2rgb "$1")
echo -e "\e[48;2;${rgb}m${2}\e[0m"
}
# --- normal colors ---
BLACK_N='\e[30m'
RED_N='\e[31m'
GREEN_N='\e[32m'
YELLOW_N='\e[33m'
BLUE_N='\e[34m'
PURPLE_N='\e[35m'
CYAN_N='\e[36m'
WHITE_N='\e[37m'
RESET='\e[0m'
# GOLD using TrueColor
GOLD_N='\e[38;2;255;215;0m' # #FFD700
# --- bright colors ---
BLACK_B='\e[1;90m'
RED_B='\e[1;91m'
GREEN_B='\e[1;92m'
YELLOW_B='\e[1;93m'
BLUE_B='\e[1;94m'
PURPLE_B='\e[1;95m'
CYAN_B='\e[1;96m'
WHITE_B='\e[1;97m'
# --- simple wrapper functions ---
goldn() { echo -e "${GOLD_N}${1}${RESET}"; }
redn() { echo -e "${RED_N}${1}${RESET}"; }
greenn() { echo -e "${GREEN_N}${1}${RESET}"; }
yellown() { echo -e "${YELLOW_N}${1}${RESET}"; }
bluen() { echo -e "${BLUE_N}${1}${RESET}"; }
purplen() { echo -e "${PURPLE_N}${1}${RESET}"; }
cyann() { echo -e "${CYAN_N}${1}${RESET}"; }
whiten() { echo -e "${WHITE_N}${1}${RESET}"; }
redb() { echo -e "${RED_B}${1}${RESET}"; }
greenb() { echo -e "${GREEN_B}${1}${RESET}"; }
yellowb() { echo -e "${YELLOW_B}${1}${RESET}"; }
blueb() { echo -e "${BLUE_B}${1}${RESET}"; }
purpleb() { echo -e "${PURPLE_B}${1}${RESET}"; }
cyanb() { echo -e "${CYAN_B}${1}${RESET}"; }
whiteb() { echo -e "${WHITE_B}${1}${RESET}"; }
# examples:
# yellowb "$(figlet -f big 'Hello!')"
# redn "$(figlet -f future 'World.')"
# fghex "#FFD700" "Gold über Hex"
Nachdem wir die Datei gespeichert haben, erstellen wir unser eigentliches Skript und laden uns die Funktionen einfach rein:
#!/bin/bash
source "path/to/file/and/of/course/the/file/itself"
# testfoo
redb "Hello World.";
Fertig ist die Laube; wir ersparen es uns, Farben mühselig in jedem Skript einzeln zu definieren =)
Kommen wir zu lib und bin
lib = Library = Bibliothek
bin = Binary = Binärdatei(en)
Viele Leute packen Library-Files in /usr/local/lib/meinprojekt/ und greifen von /usr/local/bin/mein-script über einen absoluten Pfad darauf zu.