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

Frédéric Schütz schutz at mathgen.ch
Thu Nov 8 00:38:27 CET 2012


On 08/11/12 00:08, Félix Hauri wrote:

Salut Félix,

> Mon grain de sel:

toujours bienvenu !

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

Bonne idée !

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

Non; le "special case, c'était en cas de nom de repertoire qui contient 
des espaces. Dans mon bash, la fonction ci-dessus ne marche pas dans un 
tel cas. D'où les "" dans l'appel de command. Mais dans un tel cas, cd 
"" semble avoir le même effet que "cd ." (donc rien), et en tout cas pas 
"cd ~". D'où le cas spécial.

> Bref, voici une version très certainement discutable, mais qui le fait:

Ouch; faudra que je regarde en détail. Je vois qu'il y a l'"usage", mais 
faut quand même décortiquer pour voir ce que font les options... :-)

Merci !

Frédéric

> --- 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
> _______________________________________________
> gull mailing list
> gull at forum.linux-gull.ch
> http://forum.linux-gull.ch/mailman/listinfo/gull



More information about the gull mailing list