Eine einfach Möglichkeit um Shell Skripte zu überprüfen bietet
shellcheck.net an. Es lässt sich auch lokal installieren und liefert auch dort Informationen zu Bugs & Verbesserungen. Bei mir immer am Anfang einer Neuinstallation dabei
Installation unter debian :
apt-get install shellcheck
Es ist manchmal ganz interresant vorhandene Skript testen zu lassen. Unterstützt werden bash, ksh , sh (POSIX kompatibel) und zsh.
Shellcheck on Github
shellcheck - wiki - Fehlercodes
Man möchte in einem Python Script einen Key Event abfangen. Das geht recht gut über curses
Beispiel :
#!/usr/bin/env python
import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()
key = ''
while key != ord('q'):
key = stdscr.getch()
stdscr.addch(20,25,key)
stdscr.refresh()
if key == curses.KEY_UP:
stdscr.addstr(2, 20, "Up")
elif key == curses.KEY_DOWN:
stdscr.addstr(3, 20, "Down")
curses.endwin()
Hier gefunden :
stackoverflow.com - allyourcode
Referenz - Python 3.5 - curses
Alle Unterordner eines Ordners durchnummeriert anzeigen.
path=/home
array=()
while IFS= read -r -d $'\0'; do
array+=("$REPLY")
done < <(find ${path} -maxdepth 1 -type d ! -name '.*' ! -wholename ${path} -print0 )
cnt=1
for item in "${array[@]}"
do
echo "${cnt}) -> ${item}"
((cnt++))
done
Parameter sauber an Skript übergeben mit
getopts.
# definiere mögliche Parameter
# ------------------------------------------------
while getopts s:f:h opts; do
case ${opts} in
s) var1=${OPTARG} ;;
f) var2=${OPTARG} ;;
h) show_help ;;
esac
done
Erklärung :
In diesem Beispiel gibt es 3 Parameter s,f und h , wenn -s angegeben wird
muss ein Inhalt folgen. Also script.sh -s wirft den Fehler aus
Diese Option erfordert ein Argument -- s
das selbe würde auch auftreten wenn f ohne Inhalt angegeben wird. Das wird definiert indem bei getopts ein : hinter dem parameter steht (s:f:) bei h steht kein : hinter dem Buchstaben somit wird dieser Parameter leer aufgerufen also nur mit -h.
you want to know more :
mkssoftware.com docs getopts
wiki.bash-hackers.org - howto - getopts_tutorial
Wenn man den Pfad des Bash Skriptes ermitteln möchte das gerade gestartet ist reicht diese Variable
# eigener Pfad
basepath=$(dirname $(readlink -f ${0}))
Mit diesem Skript ist es möglich eine beliebige Quelle von Pulse Audio aufzuzeichnen.
Ich habe das Skript unter Linux Mint 18 erstellt und getestet.
Es müssen die vorbis-tools installiert sein dies kann so erledigt werden !
apt-get install vorbis-tools
Hier das Skript :
#!/bin/bash
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
WHITE=$(tput setaf 7)
NORMAL=$(tput sgr0)
if [[ ${#} -lt 1 ]]
then
echo ""
echo ""
echo "${WHITE}Bitte den PulseAudio Index angeben !!"
count=$(pacmd list-sink-inputs | grep -E 'index:' | wc -l)
if (( $count > 0 ));then
echo "${YELLOW}_____________________________________________________________________"
echo ""
echo "Alle Pulseaudio Sinks werden angezeigt"
echo "_____________________________________________________________________${RED}"
echo ""
pacmd list-sink-inputs | grep -E 'index:|client:'
echo "${YELLOW}_____________________________________________________________________"
else
echo "${YELLOW}_____________________________________________________________________"
echo ""
echo " Wenn keine Musik läuft kann kein Sink ermittelt werden"
echo "_____________________________________________________________________${NORMAL}"
echo "Bitte Skript neu starten NACHDEM die Musik gestartet wurde !"
exit 1
fi
echo -n "Bitte den Index wählen : "
read inp0
INDEX=$inp0
else
INDEX=$1
fi
if [[ ${#} -lt 2 ]]
then
echo "${WHITE}Bitte den Zielpfad & Namen angeben OHNE LEERZEICHEN mit ogg am Ende !${NORMAL}"
read inp1
FILE="$inp1"
else
FILE="$2"
fi
pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o $FILE --raw -