• In diesem Bereich findet ihr Tutorials und Reviews. Die Forenrechte zur Erstellung neuer Themen sind hier eingeschränkt, da Problemdiskussionen bitte in den übrigen Forenbereichen auf Apfeltalk zu führen sind. Wer ein Tutorial oder Review einstellen möchte, kann im Unterforum "Einreichung neuer Tutorials" ein neues Thema erstellen. Die Moderatoren verschieben den Beitrag dann in den passenden Bereich.
  • Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

"Pimp my Terminal" - neue Funktionalitäten für die Bash!

rootie

Filippas Apfel
Registriert
30.06.11
Beiträge
8.828
Hallo zusammen,

ich habe mir vor vielen Jahren einmal eine schöne Konfigurationsdatei für das Terminal geschrieben. Diese Datei fügt viele neue Funktionalitäten hinzu, unter anderem Sicherheitsabfragen vor dem Löschen von Dateien bzw. Verzeichnissen. Gerade für Anfänger ist es also eine sehr gute Möglichkeit, das Schreckgespenst "Terminal" einmal auszuprobieren. Es bietet schier unbegrenzte Möglichkeiten zur Konfiguration von OS X.

Um das Terminal bzw. die darunter liegende Bash konfigurieren zu können, braucht man die Datei .profile direkt im Home-Verzeichnis. Der Punkt vor der Datei bedeutet, dass sie versteckt und standardmäßig nicht angezeigt wird. Das ist aber erst mal nicht tragisch. Ich erkläre also erst mal die neuen Funktionalitäten in der Datei (welche übrigens an diesem Post dranhängt).

Code:
# Verschiedene Aliase, um die Eingaben zu erreichen. Statt "cd .." kann man fortan einfach ".." eingeben, um ein Verzeichnis nach oben zu kommen
alias ..='cd ..'
alias cd..='cd ..'

# Sicherheitsabfrage beim Kopieren standardmäßig aktivieren
alias cp='cp -i'
alias mv='mv -i'

# Sprechendere Ausgabe beim ls-Befehl
alias ls='ls -F'

# Die Eingabe von "l" zeigt direkt eine schön formatierte Ausgabe an. Für so etwas müsste man normalerweise immer "ls -alF" eingeben
function l
  {
    /bin/ls -alF "$@" | "${PAGER:-more}"
  }

# "psg" steht für "ps grep" und filtert die Prozesse nach Suchkriterien aus. Beispiel: "psg itunes" zeigt alle Prozesse an, die "itunes" im Namen haben
function psg()
  {
    /bin/ps -ef | grep -i $* | grep -v 'ps -ef' | grep -v grep
  }

# Fügt Sicherheitsabfragen zum Lösch-Befehl "rm" hinzu. Somit kann es nicht mehr passieren, dass man versehentlich Dateien löscht.
function rm()
  {
    local RM option opt_{f,i,r}

    RM=/bin/rm

    for option in "$@"
    do
        case $option in
        -*)
            option="${option#?}"
            while [ -n "$option" ]
            do
                case $option in
                    f*) opt_f=' -f'
                        unset opt_i;; # '-f' overrides '-i'.
                    i*) opt_i=' -i'
                        unset opt_f;; # '-i' overrides '-f'.
                 [rR]*) opt_r=' -r';;
                     *) echo "rm: illegal option $option"
                        echo "usage: rm [-fiRr] file ..."
                        return 2;;
                esac
                option="${option#?}"
            done
            shift
            ;;
        *)
            break;;
        esac
    done

    if [ -n "$opt_i" ]
    then
        $RM $opt_r $opt_f -i "$@"
    else
        if [ $# -le 1 ]
        then
            /bin/ls -dbF "$@"
                        echo -n "Really remove $# file/dir"
            if [ -n "$opt_r$opt_f" ]; then echo -n " with$opt_r$opt_f"; fi
            echo -n "? [yes,no] "
            read option
            case "$option" in
            y | yes)
                $RM $opt_r $opt_f "$@";;
            *)
                echo "Nothing removed.";;
            esac
        else
            /bin/ls -dbF "$@"
            echo -n "Really remove $# files/dirs"
            if [ -n "$opt_r$opt_f" ]; then echo -n " with$opt_r$opt_f"; fi
            echo -n "? [yes,interactive,no] "
            read option
            case "$option" in
            y | yes)
                $RM $opt_r $opt_f "$@";;
            i | interactive)
                $RM -r $opt_f -i "$@";;
            *)
                echo "Nothing removed.";;
            esac
        fi
    fi
}

# Formatiert das Prompt schön und informativ mit Benutzername und Rechnername
if [ `whoami` == "root" ]
then
   PS1="\[\033[1m\]\u@\h:\w\[\033[0m\]# "

else
   PS1="\[\033[1m\]\u@\h:\w\[\033[0m\]> "
fi


Ich arbeite nun schon seit über 15 Jahren mit dieser Konfiguration und bin immer gut gefahren. Selbstverständlich kann man hie und da noch ein wenig etwas erweitern. Solltet Ihr dazu Input haben, einfach schreiben. Dann erweitere ich das Tutorial entsprechend.

Nun zur Frage, wie man die Datei entsprechend "scharf schalten" kann. Das geht so:

- Öffnet ein Terminal (Apfel-Taste + Leertaste, dann "terminal" eingeben)
- Wenn die Datei .profile bereits existiert, tippt folgendes ein: "open .profile" (ohne Anführungszeichen). Wenn nicht, müsst Ihr zunächst "touch .profile" eingeben, um die Datei anzulegen
- Kopiert den Inhalt der Datei profile.txt aus dem Anhang in den Editor und speichert die Datei
- Beendet das Terminal komplett und startet es neu; die Änderung ist direkt wirksam

Viel Spaß beim Ausprobieren - wenn Ihr Fragen habt, einfach schreiben :)


Viele Grüße,
rootie
 

Anhänge

  • Profile.txt
    2,6 KB · Aufrufe: 132