[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Re: RÃpertoire vide



Richard Prescott wrote:
Je dois avouez que je ne comprends pas tres bien la question.

Les deux shifts serve a enlever '.' et '..'...  Ils y sont toujours
(sauf peut-etre sous certains (*) Unix lorsque $1 == /, quelqu'un peut
essayer?).  Ensuite il est possible que $1 vale "bbb\ aaa/*" donc pas
necessairement un fichier ou un repertoire, d'ou le test.

(*): pas sous SunOS 5.8, BSD?

Aussi, il manque des '"' autour de ton $1 dans ton 'ls'

#!/bin/bash
[ -z "$1" -o \! -d "$1" ] &&
{ echo "Usage: repvide.sh nom-du-repertoire" >&2; exit 1; }
set -- "$1"/{.,}*; shift; shift; if [ -f "$1" -o -d "$1" ]; then
ls -lad "$1";
exit 1;
else
echo vide >&2;
exit 0;
fi

cool :) Ãa marche sur bsd avec bash, mais pas sur sh ;)

>bash repvide3.sh
Usage: repvide.sh nom-du-repertoire
>bash repvide3.sh bar
vide
>sh repvide3.sh bar
shift: can't shift that many
vide


DEMO:
[richard@richard test]$ mkdir "il est vide"
[richard@richard test]$ ./repvide.sh il\ est\ vide/
vide
[richard@richard test]$ touch il\ est\ vide/ccc
[richard@richard test]$ ./repvide.sh il\ est\ vide/
-rw-rw-r--    1 richard  richard         0 Mar 24 06:22 il est vide//ccc
[richard@richard test]$ rm il\ est\ vide/ccc
[richard@richard test]$ mkdir !$
mkdir il\ est\ vide/ccc
[richard@richard test]$ ./repvide.sh il\ est\ vide/
drwxrwxr-x    2 richard  richard      4096 Mar 24 06:22 il est vide//ccc
[richard@richard test]$


On Tue, 2004-03-23 at 18:53, Marc St-Jacques wrote:


Le 23 Mar 2004 16:01:03 -0500
Richard Prescott <[email protected]> a Ãcrit:


Je ne pouvais resister :

Alors, lÃ, je m'avoue vaincu ... sur le principe ;-) mais cette fonction est trÃs dangereuse si on n'y fait pas attention.


CrÃons trois rÃpertoires bidons : aaa, bbb et bbb\ aaa.
tous les rÃpertoires contiennent un fichier ccc

AprÃs le deuxiÃme shift, j'ai l'impression que $1pointe maintenant vers
le *rÃpertoire* aaa et a donc son contenu dans la mire.

Si le contenu de repvide.sh serait seulement cette ligne:
        set -- "$1"/{.,}*; shift;shift;ls -la $1

voici ce que donnerais l'exÃcution avec pour paramÃtre bbb\ aaa :

machine:/home/public# sh repvide.sh bbb\ aaa
-rw-r--r--    1 root     root            0 Mar 23 18:36 aaa/ccc

bbb:
total 8
drwxr-xr-x    2 root     root         4096 Mar 23 18:40 .
drwxrwxrwx    6 root     root         4096 Mar 23 18:40 ..
-rw-r--r--    1 root     root            0 Mar 23 18:40 ccc

Ãtonnant, non ? Est-ce vraiment prudent ces shifts ?

--- Marc St-Jacques

Linux from scratch. http://www.linuxfromscratch.org
Your distro. Your rules.


-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS !d s+:+ a+ C+++ UL++ P++ L+++
E--- W+ N+ w-- M- PS PE- Y+ PGP++
t+ X+ R tv b- DI D++ G e+++ h++ !r
!y+
------END GEEK CODE BLOCK------
----


Attachment: signature.asc
Description: OpenPGP digital signature