• Café
  • Eure brauchbarsten Funktionen

  • [gelöscht]

Hallo allerseits!

Nachdem ich mit großem Interesse dem "Eure brauchbarsten aliase" gute Vorgaben entnommen habe möchte ich
an dieser Stelle eine Sammlung von nützlichen Funktionen erstellen:

1) (ich fand es immer etwas anstrengend jedesmal "amixer set Master xx dB/%" zu tippen um die Lautstärke in der Konsole
zu ändern, weshalb ich eine kleine Funktion dafür erstellt habe)

vol ()
{
if [ "$1" -ge 0 ] 2> /dev/null && [ "$1" -le 100 ]; then
amixer set Master $1%;
else
amixer get Master;
fi
}
(Wobei hier natürlich "Master" dem zu regelnden Kanal entsprechen sollte)

Um den shutdown-prozess mit wenig Tastaturquetschen einzuleiten und eine Möglichkeit zu haben zwischen
sofortigem- oder zeitgesteuertem Herunterfahren wählen zu können:

qqq ()
{
if [ "$1" -ge 1 ] 2> /dev/null && [ "$1" -le 9999 ]; then
sudo shutdown -P $1;
else
sudo shutdown -P now --no-wall;
fi
}


Liebe Grüße vom steinchen
Code-Tags sind da aber schon nicht schlecht für so etwas.
24 Tage später
  • [gelöscht]

Uups, stimmt!

Entschuldigung, ich war etwas übernächtigt beim Verfassen des Posts...

Hier eine verbesserte Version der shutdown-funktion:
qqq ()
{
    if [ -z "$1" ]; then
        sudo shutdown -P now;
    else
        if [ "$1" -ge 1 ] 2> /dev/null && [ "$1" -le 9999 ]; then
            sudo shutdown -P $1;
        else
            return 1;
        fi;
    fi
}
Greetz, ich
Suche nach einem speziellen Prozessnamen?
psg() { ps auxw | grep -v "^grep.*" | grep -E "(^USER.*COMMAND$|$@)"; }
Anwendung:
# psg firefox
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
------     798  1.6  9.5 1291696 382952 ?      Sl   07:54   7:34 /usr/lib/firefox/firefox
Völlig banal, aber: Verzeichnis erstellen und betreten mit einem Befehl 🙂
function mkcd () {
	mkdir -p "$1"
	cd "$1"
}
7 Tage später
Da mir alle grafischen Prozesskiller zu nervig wurden und ps nicht alle von mir gestarteten Programm Programme gezeigt hat (läuft nur mit ps -A, was aber alles, inklusive Kernelprozesse, raushaut, was der Übersicht beim raussuchen nicht dienlich ist), habe ich mir eine Prozesskillfunktion geschrieben, der ich einfach ein Pattern vorwerfe, um eine numerierte Liste mit Prozessen zu bekommen, auf die das Pattern passt.
Dann kann ich mittels Eingabe der Zahl oder "a" für alle den entsprechenden Prozess killen.
Hat sich als ganz angenehm erwiesen.
Ist aber zsh-code (habe die Zeile, die afaik zsh-spezifisch ist, markiert), für eine bashrc also vermutlich nicht allzu brauchbar.
function kp() {
        plines=`pgrep -l $1`
	array=(${(s:   #zsh-spezifisch
:)plines})    #zsh-spezifisch
	echo Which one?
	for ((i = 1; i < ${#array[*]}+1; i++)); do
		echo $i")" ${array[$i]}
	done
	read wanted
	case $wanted in
	"a")
		for proc in ${array[*]}
		do
                        kill $(echo ${proc:0:`expr index $proc " "`-1})
			echo $proc killed
		done
		;;
	[0-9]##)
                kill ${array[$wanted]:0:`expr index $array[$wanted] " "`-1}
		echo ${array[$wanted]} killed
		;;
	*) echo "nothing done" 
	esac
}
[Edit: kleinere Korrekturen, Creshals Vorschlag bzgl. pgrep aufgenommen, dadurch optisch schöner und sogar einen Prozess gespart]

Und eine kleine Funktion um zu überprüfen, ob ein bestimmtes Pattern in einem File enthalten ist, [Edit:] hat sich mit dem Hinweis Creshals erübrigt.[/Edit]

@Dirk
Hatte ich direkt übernommen, als du's bei den aliases gepostet hast, wirklich sehr praktisch. 😉
> habe ich mir eine Prozesskillfunktion geschrieben, der ich einfach ein Pattern vorwerfe, um eine numerierte Liste mit Prozessen zu bekommen, auf die das Pattern passt.

pkill? Oder doch pgrep? 🙂

> Und eine kleine Funktion um zu überprüfen, ob ein bestimmtes Pattern in einem File enthalten ist.

AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH
AAAAAAAAAAHHHHHHHHHHHHHHH

grep PATTERN FILE ihr Pfeifen.
Creshal schriebpkill? Oder doch pgrep? 🙂
pkill killt alles, was auf das Pattern passt und genau das möchte ich vermeiden, falls ich mal ein Pattern eingebe, was auf mehr Prozesse passt, als ich erwarte. Deswegen habe ich mich von der Autokill-Funktionalität auch schnell wieder verabschiedet.
pgrep wäre eine Möglichkeit, das ersetzt mir jedoch lediglich den Eintrag "ps -A | grep $x", wenn ich nicht separat nochmal kill aufrufen möchte (was länger dauert, v. A. wenn ich alle Prozesse killen möchte).
Creshal schriebgrep PATTERN FILE ihr Pfeifen.
Man lernt doch nie aus. Danke, muss mir beim "grep --help"-studieren irgendwie durchgegangen sein.

Und Creshal: Denk an deinen Blutdruck!^^
Ne, einfache Bookmark-Verwaltung für die ZSH:
bmdir () {                                                                         
  local entry_name                                                                 
  local tmp_file                                                                   
  if [ $# -eq 0 ]                                                                  
  then                                                                             
    entry_name=$PWD:t                                                              
    echo "$fg[yellow]Use ${entry_name} as short name${reset_color}"                
  else                                                                             
    entry_name="$1"                                                                
  fi                                                                               
                                                                                   
  tmp_file=$(mktemp)                                                               
  egrep -v "^${entry_name}\s" $ZSHHOMEDIR/named_dirs > $tmp_file                   
  echo "${entry_name}  $PWD" >> $tmp_file                                          
  =mv -f $tmp_file $ZSHHOMEDIR/named_dirs                                          
  hash -d ${entry_name}=${PWD}                                                     
}
Mit 'bmdir foo' wird der aktuelle Ordner als benanntes Verzeichnis gespeichert und ist per ~foo erreichbar.

Braucht 'colors' und ZSHHOMDEDIR muss gesetzt sein.
Hallo,

ein schöner Thread (kann man ihn evtl. auch fixieren?), der Beitrag von Dirk (#5) hat mich auf die folgenden beiden Funktionen gebracht. Kopieren, bzw. Verschieben und dabei die Datei(en) direkt verfolgen:
# --- Datei kopieren und verfolgen: 
function cpd () {
  cp ${@: 1:$(( $# -1 ))} ${@: -1}
  cd ${@: -1}
}
Analog für mv. Allerdings gibt es Probleme, wenn die Dateien oder der Zielpfad Leerzeichen enthalten. Ein vorangestelltes \ wie üblich genügt dann nicht und man benötigt Single-Quotes. Vielleicht hat jemand eine Idee, wie man das Problem loswerden könnte.
harald91 schriebVielleicht hat jemand eine Idee, wie man das Problem loswerden könnte.
Auf eine Datei je Vorgang beschränken 🙂
function cpd () {
  cp "${1}" "${2}"
  cd $(dirname "${2}")
}
Dirk schrieb
harald91 schriebVielleicht hat jemand eine Idee, wie man das Problem loswerden könnte.
Auf eine Datei je Vorgang beschränken 🙂
Muss man gar nicht:
function cpd() {
  cp "$@"
  cd "${!#}"
}
portix schrieb
function cpd() {
  cp "$@"
  cd "${!#}"
}
Excellent! Manchmal bin ich aber auch blöder Esel, da pfrimel ich mühevoll die Parameter in Dateien und Zielverzeichnis auf, um das an cd zu übergeben, dabei ist das ja total unnötiger Blödsinn und auf die Idee beim cd-Kommando Quotes zu verwenden hätte ich auch kommen können.
# --- Datei aus dem AUR laden:
function aur () {
  wget https://aur.archlinux.org/packages/${1:0:2}/$1/$1.tar.gz
}
Ich hab das mit dem AUR etwas erweitert hier bei mir drauf:
#!/bin/sh
wget https://aur.archlinux.org/packages/${1:0:2}/$1/$1.tar.gz
bsdtar -xf $1.tar.gz
rm $1.tar.gz
(oder eben wie Harald als function)
Hallo,

einige von euch kennen wahrscheinlich das Plugin Vimperator für firefox. Da man in so manchem Linux-Forum hin und wieder mal einen Code-Block in eine Nachricht packen möchte und es auf Dauer lästig ist das aus irgendeine{'m Editor','r Konsole'} zu kopieren, habe ich mir folgende Funktion überlegt:
>>> grep -A9 -B1 vpr /home/harald/.bashrc
# --- Ausgabe von Shell-Kommando, mit erzeugendem Kommando via Vimperator (:e) an Forenpost anhängen: 
function vpr () {
  if [ -f /tmp/vimperator* ] 2>/dev/null; then 
    vptemp='\/tmp\/vimperator*' 
    prompt='>>>' 
    
    echo "[code]${prompt} $@" >> ${vptemp}
    echo $(echo "$@ | tee -a ${vptemp}" | sed "s/&&/| tee -a ${vptemp} &/g") | bash
    echo "
" >> ${vptemp}
fi
}
[/code]

Wenn man das Plugin Vimperator installiert hat und in einem Textfeld 'Strg + I' drückt, kann man mit einem in der ~/vimperatorrc festgelegten Editor schreiben.
>>> cat /home/harald/.vimperatorrc
set editor="urxvt -e vim"
Ist der Editor, in dem man seinen Forenbeitrag verfasst geöffnet, dann kann man in einem Terminal, das Kommando
vpr KOMMANDO 
eingeben und in Vim, mit :e! aktualisieren. Enthält das Kommando Pipes, Umleitungen, oder Kaufmanns-UND muss das ganze Kommando mit Single-Quotes versehen werden. Vor jedem ausführen der Funktion muss mit :w! gespeichert werden und nach jedem Ausführen der Funktion muss mit :e! die Datei, die Vim schreibt aktualisiert werden. Ist der Beitrag fertig, wird mit :wq! gespeichert und der Editor verlassen und man kann seinen Beitrag absenden.
>>> p="pacman -Qm"; $p && $p | echo -e "\ngesamt: $(wc -l)"
blockout2 2.4-4
brother-hl3040cn-cupswrapper 1.1.1_4-1
brother-hl3040cn-lpr 1.1.1_4-1
conkyexaile-bzr 29-1
dzen2-xft-xpm-xinerama-svn 271-2
exaile 3.3.0-1
mupdf-patched 0.9-1
python2-pypdf 1.13-2
rxvt-unicode-patched 9.15-5
seturgent 1.4-2
stapler 2b-2
ttf-ms-fonts 2.0-9
urxvt-tabbedex 0.4-1
usb-creator 0.2.40-2

gesamt: 14
Die obigen Code-Blöcke wurden mit der Funktion durch nachfolgende Eingaben erzeugt:
vpr grep -A9 -B1 vpr ~/.bashrc
vpr cat ~/.vimperatorrc
vpr 'p="pacman -Qm"; $p && $p | echo -e "\ngesamt: $(wc -l)"'
function say() { mplayer -really-quiet "http://translate.google.com/translate_tts?tl=de&q=$1" }
elias schrieb
function say() { mplayer -really-quiet "http://translate.google.com/translate_tts?tl=de&q=$1" }
Aaah, das ist geil! Kannte ich gar nicht!
Für welche Anwendungen verwendest Du diese Funktion? Deutsche Wörter auszusprechen fällt uns Deutschen im Allgemeinen ja nicht so schwer. 😉 Die Idee ist aber ziemlich gut, wenn man die Endung de&q=$1 ersetzt zu en&q=$1, erhält man die englische Aussprache (wenn $1) ein englisches Wort ist. Man könnte das ganze erweitern zu einer Vokabelafrage, die z.B: für ein deutsches Wort die englische Übersetzung mitsamt richtiger Aussprache ausgibt, so könnte man ziemlich flott das ein oder andere englische Wort nachschlagen. Sobald ich etwas Zeit habe werde ich mal versuchen das umzusetzen.