[gull] Astuce shell: ls automatique après un cd

Félix Hauri felix at f-hauri.ch
Thu Nov 8 00:08:15 CET 2012


Salut Fred,

Mon grain de sel:

On Wed, Nov 07, 2012 at 02:04:50PM +0100, Frédéric Schütz wrote:
> "ls" ? Si c'est le cas, pourquoi ne pas automatiser la chose ?
(Perso, voyangeant a travers de nombreux répertoires au contenu long
comme un jour sans pain, j'ajouterai `` | tail -n $LINES ''. )

> function cd ()
> {
>   # If empty, cd to home directory
>   # Special case, because cd "" stays in the same directory
>   #  -z: true if the length of the argument is 0
>   if [ -z "$1" ]
>   then
>     command cd "$HOME" && ls -F --color=auto
>   else
>     command cd "$1" && ls -F --color=auto
>   fi
> }
> [clairement améliorable]
(On peut toujours faire ``mieux'' et ``le mieux est l'ennemi du bien.''
 ... mais mon petit grain de sel quand même ;-)

Et j'aurrai utilisé la commande ``builtin'' plutôt que ``command'',
qui semble plus indiquée pour ce genre d'applications.

Par ailleur, je ne comprend pas pkoi le ``special case'': il me semble
que

function cd() { command cd $@ && /bin/ls -ltr | /usr/bin/tail -n $LINES; }

Mais on peut égallement se dire que le ``spécial case'' pourrait se justifier
pour éviter de remplir l'écran à chaque ``retour à la maison''.

Bref, voici une version très certainement discutable, mais qui le fait:
--- cd_ls_sourcefile.bash ---
TEXTDOMAIN=bash
cd() {
    local -a ARGS
    local extra_ls print_wd
    while [ ! -z "$1" ] ;do case $1 in
            -n    ) extra_ls=false;                shift;;
            -f    ) extra_ls=true;                 shift;;
            -p    ) print_wd=true;                 shift;;
            -q    ) print_wd=false;                shift;;
            -Q    ) print_wd=false;extra_ls=false; shift;;
            --    )                ARGS+=($1);     shift;;
	    -L|-P )                ARGS+=($1);     shift;;
            -|~   ) [ $print_wd ] || print_wd=true; ARGS+=($1); shift;;
            -*    ) printf $0:\ $"%s: invalid option"\\n $1
		echo "Usage: cd [-L|-P] [-Q|[-f|-n][-p|-q]] [dir]"
		return ;;
            *     ) [ $extra_ls ] || extra_ls=true; ARGS+=("$1"); shift;;
	esac;done
    builtin cd "${ARGS[@]}" >/dev/null && \
	[ $extra_ls ] && \
	$extra_ls && /bin/ls -ltrF --color | tail -n $((LINES-1))
    [ $print_wd ] && $print_wd && echo $PWD
}
unset TEXTDOMAIN
--- cd_ls_sourcefile.bash ---

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list