• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Ist eine function der .bashrc auf die .tcshrc übertragbar?

Themenstarter #1
Hi@All,

ich habe Linux von meiner Workstation verbannt und bin zu FreeBSD gewechselt. Auf meinen Servern nutze ich schon länger FreeBSD mit der System-Shell (TCSH). Jetzt bin ich gerade dabei, mir das System unter FreeBSD einzurichten. Hierbei bekomme ich eine nette Funktion, die ich schon seit Jahren nutze, nicht an den Start. Daher bräuchte ich ein wenig hilfe von Euch.

BASH-FUNKTION:

Bash:
function ex () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar)         time tar -vxf $1                                            ;;
            *.tar.bz2)     time tar -I lbzip2 -vxf $1                                  ;;
            *.tbz2)        time tar -vxjf $1                                           ;;
            *.bz2)         time lbzip2 d $1                                            ;;
            *.tar.gz)      time tar -vxzf $1                                           ;;
            *.tgz)         time tar -vxzf $1                                           ;;
            *.gz)          time gunzip $1                                              ;;
            *.tar.zst)     time tar --zstd -vxf $1                                     ;;
            *.tzst)        time tar --zstd -vxf $1                                     ;;
            *.zst)         time zstd -d $1                                             ;;
            *.tar.xz)      time tar -vxf $1                                            ;;
            *.lz4)         time lz4 -d $1                                              ;;
            *.rar)         time unrar x $1                                             ;;
            *.7z)          time 7z x $1                                                ;;
            *.zip)         time unzip $1                                               ;;
            *.Z)           time uncompress $1                                          ;;
            *.gpg)         time gpg2 $1                                                ;;
            *)             echo "'$1' cannot be extracted via ex ()" ;;
            esac
    else
        echo "'$1' is not a valid file"
    fi
}
Wie kann ich das in der .tcshrc umsetzen? Hat da jemand einen Tipp für mich oder eine Lösung? Ich sage schon mal Danke!

LG
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#2
Hat da jemand einen Tipp für mich oder eine Lösung?
Vorweg, auch wenn ich der Spielverderber bin: Vergiss die tcsh. Die tcsh ist als interaktive Shell nicht prinzipiell schlecht, aber der Rest der Welt nutzt nun mal Bourne-Shells. Und die zsh kann wesentlich mehr, ist konsistenter und gelichzeitig deutlich weniger buggy.

Was du möchtest, ist in der csh / tcsh beispielsweise kaum sinnvoll möglich. Die Shell kann keine Funktionen. Man kann Funktionen nur durch Aliase emulieren, Aliase sind jedoch immer immer einzeilig, switch / case hingegen mindestens dreizeilig. Die zweite Möglichkeit ist goto, es funktioniert aber nur innerhalb eines Scripts und nicht im interaktiven Modus. Damit bleibt nur die Möglichkeit über ein Helferscript.

Du legst ein Helferscript an, beispielsweise ~/temp/ex.csh:
Code:
#!/bin/tcsh

switch ($1)
case '*tar.gz':
    echo "Endung ist '.tar.gz"
    breaksw
default:
    echo "Default"
    breaksw
endsw
Und dann ein Alias darauf: alias ex '~/temp/ex.csh'

Nun fühle ich mich dreckig. :) Allerdings kann das Helferscript eine beliebige ausführbare Datei sein, also auch ein normales Shellscript für die /bin/sh. Das macht es etwas weniger widerlich.
 
Themenstarter #3
Danke für deine Antwort und das kleine Beispiel.

Ich hab mich gerade in die tcsh eingelesen, und ja, die unterstützt keine Funktionen. Daher werde ich erst mal mit dem user und toor bei der bash bleiben und der root bleibt bei seiner tcsh.