#1 07.01.2013 11:44:38

hihihi
Gast

Eure brauchbarsten Funktionen

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

#2 07.01.2013 12:13:33

skull-y
Mitglied

Re: Eure brauchbarsten Funktionen

Code-Tags sind da aber schon nicht schlecht für so etwas.

Offline

#3 31.01.2013 12:54:01

hihihi
Gast

Re: Eure brauchbarsten Funktionen

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

#4 31.01.2013 16:36:02

Astorek
Mitglied

Re: Eure brauchbarsten Funktionen

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

Offline

#5 31.01.2013 17:47:43

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

Völlig banal, aber: Verzeichnis erstellen und betreten mit einem Befehl smile

function mkcd () {
	mkdir -p "$1"
	cd "$1"
}

Offline

#6 07.02.2013 22:56:55

Ovion
Mitglied

Re: Eure brauchbarsten Funktionen

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. wink

Beitrag geändert von Ovion (08.02.2013 23:21:45)

Offline

#7 07.02.2013 22:58:24

Creshal
Mitglied

Re: Eure brauchbarsten Funktionen

>  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? smile

> 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.

Beitrag geändert von Creshal (07.02.2013 22:59:31)

Offline

#8 07.02.2013 23:37:48

Ovion
Mitglied

Re: Eure brauchbarsten Funktionen

Creshal schrieb:

pkill? Oder doch pgrep? smile

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 schrieb:

grep 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!^^

Beitrag geändert von Ovion (07.02.2013 23:43:47)

Offline

#9 08.02.2013 03:50:09

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

Offline

#10 08.02.2013 10:46:49

Kinch
Mitglied

Re: Eure brauchbarsten Funktionen

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.

Beitrag geändert von Kinch (08.02.2013 10:47:41)

Offline

#11 08.02.2013 18:50:10

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

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.

Beitrag geändert von harald91 (08.02.2013 18:51:23)

Offline

#12 08.02.2013 19:49:40

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

harald91 schrieb:

Vielleicht hat jemand eine Idee, wie man das Problem loswerden könnte.

Auf eine Datei je Vorgang beschränken smile

function cpd () {
  cp "${1}" "${2}"
  cd $(dirname "${2}")
}

Offline

#13 08.02.2013 22:18:46

portix
Mitglied

Re: Eure brauchbarsten Funktionen

Dirk schrieb:
harald91 schrieb:

Vielleicht hat jemand eine Idee, wie man das Problem loswerden könnte.

Auf eine Datei je Vorgang beschränken smile

Muss man gar nicht:

function cpd() {
  cp "$@"
  cd "${!#}"
}

Offline

#14 08.02.2013 23:40:13

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

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.

Beitrag geändert von harald91 (08.02.2013 23:43:50)

Offline

#15 10.02.2013 21:34:26

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

# --- Datei aus dem AUR laden:
function aur () {
  wget https://aur.archlinux.org/packages/${1:0:2}/$1/$1.tar.gz
}

Offline

#16 10.02.2013 22:16:18

Army
Mitglied

Re: Eure brauchbarsten Funktionen

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)

Beitrag geändert von Army (10.02.2013 22:16:44)

Offline

#17 12.02.2013 00:24:46

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

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 "[/code]" >> ${vptemp}
  fi
}

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)"'

Beitrag geändert von harald91 (12.02.2013 00:27:12)

Offline

#18 12.02.2013 16:30:43

elias
Mitglied

Re: Eure brauchbarsten Funktionen

function say() { mplayer -really-quiet "http://translate.google.com/translate_tts?tl=de&q=$1" }

Offline

#19 12.02.2013 17:14:20

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

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!

Offline

#20 12.02.2013 18:39:00

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

Für welche Anwendungen verwendest Du diese Funktion? Deutsche Wörter auszusprechen fällt uns Deutschen im Allgemeinen ja nicht so schwer. wink 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.

Offline

#21 12.02.2013 18:59:54

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

harald91 schrieb:

Für welche Anwendungen verwendest Du diese Funktion?

In screen z.B. …

irgendwas das ewig dauert && say "Bearbeitung abgeschlossen"

… wäre eine Idee smile

Offline

#22 12.02.2013 19:04:21

Army
Mitglied

Re: Eure brauchbarsten Funktionen

Cool! Leider muss man Umlaute umschreiben.

Offline

#23 12.02.2013 20:59:35

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

Dirk schrieb:
irgendwas das ewig dauert && say "Bearbeitung abgeschlossen"

… wäre eine Idee smile

echo -e "\a"

hat mir für diesen Zweck bisher stets gereicht.

Offline

#24 12.02.2013 21:53:43

Dirk
Moderator

Re: Eure brauchbarsten Funktionen

Das macht bei mir nichts smile

Offline

#25 12.02.2013 22:58:19

harald91
Mitglied

Re: Eure brauchbarsten Funktionen

sleep 5; echo -e "\a"

Bitte das Kommando mal ausführen und innerhalb dieser fünf Sekunden auf einen anderen Desktop wechseln. Das echo-Kommando setzt den Status des Desktops auf "urgent" (englisch für dringend). Der Status bleibt solange auf "urgent" bis man wieder auf diesen Desktop wechselt (ihm also sozusagen Aufmerksamkeit widmet). Ich weiß nicht, wie das bei irgendwelchen x-beliebigen WMs aussieht, aber bei mir in XMonad (mit meiner .xmonad.hs) sieht das folgendermaßen aus:

XjbLAZ0
KiMyLZa

Es werden in meinem dmenu nur diejenigen Desktops angezeigt, die nicht-leer sind. Derjenige Desktop auf dem ich mich gerade befinde ist blau unterlegt. Ich habe dann das Kommando ausgeführt und bin von Desktop 1 auf Desktop 2 gewechselt. Nach Ablauf des sleep-Kommandos hat dann echo den Status von Desktop 1 auf "urgent" gesetzt, weshalb XMonad ihn rot unterlegt.  Genau das passiert auch immer mit meinem Desktop 6 (auf dem von Haus aus Thunderbird gestartet ist), wenn ich neue Mails erhalte. Das ganze geht auch innerhalb eines Desktops; bei mir auch im Tabbing-Layout, wenn der enstprechende Tab gerade nicht sichtbar ist (dann wird dieser markiert).


in folgender Passage in meiner ~/.xmonad/xmonad.hs sind die Farben dafür festgelegt:

>>> grep -A7 dzenPP /home/harald/.xmonad/xmonad.hs
myDzenPP = dzenPP
    { ppCurrent = wrap "^fg(snow1)^bg(#1987BE) " " ^fg()^bg()"
    , ppHidden  = dzenColor "#78AEB1" "" .wrap " " " "
    , ppUrgent  = wrap "^fg(snow1)^bg(#FE5764) " " ^fg()^bg()"
    , ppSep     = " "
    , ppLayout  = const ""
    , ppTitle   = const ""
    }

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums