Bash cdots: change directory functions .. ... .... etc mit tab-completion

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von fvu, 12.10.2006.

  1. fvu

    fvu Grünschnabel

    Dabei seit:
    12.10.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Ich wollte Tastenanschläge speichern, indem ich zurück Abkürzungen für ändernde Verzeichnisse verwendete. Ich wollte auch ein zusätzliches Argument liefern: das Verzeichnis, zum von dort, mit Vorsprung-Beendigung weiter zu gehen:
    (Mein deutsches entschuldigen… es wird übersetzt mit Hilfe von Google translate :-)

    .. [dir] = cd ../[dir]
    ... [dir] = cd ../../[dir]
    .... [dir] = cd ../../../[dir]
    ..... [dir] = cd ../../../../[dir]
    ...... [dir] = cd ../../../../../[dir]
    ....... [dir] = cd ../../../../../../[dir]
    ........ [dir] = cd ../../../../../../../[dir]

    In der BNF-Darstellung:

    ..[.[.[.[.[.[.]]]]]] [dir]

    Unter ist mein kurzes Programm - cdots.sh - ich möchte teilen.

    See also: http://www.fvue.nl/cdots/

    Freddy Vulto

    Code:
    #!/bin/bash
    # --- cdots.sh -------------------------------------------------------
    # Change directory back - 1-7 times - and forth with TAB-completion.
    # Copyright (C) 2006  Freddy Vulto
    # Version: 1.0.8
    # Usage: ..[.[.[.[.[.[.]]]]]] [dir]
    #
    # Arguments: [dir]   Directory to go forth - down the directory tree
    #
    # Example:   $/usr/share> .. local/share/   # .. lo[TAB]/sh[TAB])
    #            $/usr/local/share>  
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2, or (at your option)
    # any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software 
    # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
    # MA  02110-1301, USA
    #
    # The latest version of this software can be obtained here:
    # [url]http://www.fvue.nl/cdots/[/url]
    
    
    CDOTS_DEPTH=7
    
    
    #--- _cdots() --------------------------------------------------------
    # TAB completion for the .. ... .... etc commands
    # @see cdots()
    _cdots() {
            # ':2' = Ignore two dots at pos 0, $'\012' = newline (\n)
        local dots=${COMP_WORDS[COMP_CWORD-1]:2} IFS=$'\012' i j k=0
        local dir=${dots//./..\/}../  # Replace . with ../
        for j in $(compgen -d -- "$dir${COMP_WORDS[COMP_CWORD]}"); do
                #  If j not dir in current dir, append extra slash '/'
                #  NOTE: If j is also dir in current dir, 'complete -o 
                #+       filenames' automatically appends slash '/'
            [ ! -d ${j#$dir} ] && j="$j/"
            COMPREPLY[k++]="${j#$dir}"
        done
    } # _cdots()
    
    
    #--- cdots() ---------------------------------------------------------
    # Change directory to specified directories back, and forth
    # @param $1 string   Directory back
    # @param $2 string   Directory forth
    # @see _cdots() for TAB-completion
    function cdots() {
        cd "$1$2"
    } # cdots()
    
    
        # Define aliases .. ... .... etc
        # NOTE: Functions are not defined directly as .. ... .... etc, 
        #       because these are not valid identifiers under `POSIX'
    cdotsAlias=.; cdotsAliases=; cdotsDir=
    for ((i = 1; i <= $CDOTS_DEPTH; i++)); do
        cdotsAlias=$cdotsAlias.; cdotsDir=$cdotsDir../
        alias $cdotsAlias="cdots $cdotsDir"
        cdotsAliases="$cdotsAliases $cdotsAlias"
    done
        # Set completion of aliases .. ... .... etc to _cdots()
        # -o filenames: Escapes whitespace
    complete -o filenames -o nospace -F _cdots $cdotsAliases
    unset -v CDOTS_DEPTH cdotsAlias cdotsAliases cdotsDir i
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    There are many english boards (and also for many other languages) for scripting and linux/unix problems available. Why you're using a german board if you need an online translator?

    PS: Sorry for my english. It's not translated with 'Google translate' but it's although horrible. ;)
     
  4. fvu

    fvu Grünschnabel

    Dabei seit:
    12.10.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Because I've many visitors from this forum, I thought: this is a nice, active place to spread the word :brav:

    Freddy Vulto
    http://www.fvue.nl
     
Thema:

Bash cdots: change directory functions .. ... .... etc mit tab-completion

Die Seite wird geladen...

Bash cdots: change directory functions .. ... .... etc mit tab-completion - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  3. Bash sucht neues Logo

    Bash sucht neues Logo: Die GNU Bourne Again Shell (bash) sucht nach knapp 20 Jahren ein neues, individuelles Logo. Alle Anwender und Interessenten sind deshalb...
  4. Mit bash Skript bestimmte Werte aus Tabelle lesen

    Mit bash Skript bestimmte Werte aus Tabelle lesen: Hallo! Ich beschäftige mich erst seit Kurzem mit bash und bin deshalb noch nicht so fit darin. Und nun habe ich schon ein kleines Problem und...
  5. Bash: Geteiltes Fenster mit unterschiedlichen Funktionen

    Bash: Geteiltes Fenster mit unterschiedlichen Funktionen: Hallo Leute, ist es in Bash möglich, zwei Funktionen in zwei getrennten Teilen eines Terminalfensters ablaufen zu lassen? Da Bash die Befehle...