OVH Cloud OVH Cloud

test -d

41 réponses
Avatar
Thomas
bonjour :-)


avant je faisait
test -d sauvegardes/ && cd sauvegardes/
pour aller dans le dossier seulement si il existe,

et comme un *** j'ai transformé ca en
test -d sauvegardes/ && mkdir sauvegardes/
cd sauvegardes/
pour creer le dossier si il existe pas

(avec
#!/bin/sh -
)


pendant que j'essaye de reparer mes ****ries,
est ce que qqn peut m'indiquer comment on inverse le test svp ?

--
Informations sur Nicolas Sarkozy :
http://www.betapolitique.fr/spip.php?article0602
http://www.betapolitique.fr/spip.php?article0601
http://www.betapolitique.fr/spip.php?article0414
http://www.betapolitique.fr/spip.php?article0606
http://tDeContes.hd.free.fr/divers/Ruptures.pdf

10 réponses

1 2 3 4 5
Avatar
Stephane Chazelas
2007-09-9, 00:14(+02), Nicolas S.:
Thomas a écrit:

en fait je veux juste être ailleurs que dans mon dossier de départ
quand j'ouvre le terminal
donc ça marche pas si je met le cd dans un sous-shell


Si c'est vraiment ce que tu veux, tu peux rajouter un truc de ce genre
en toute fin de ton ~/.profile:
cd "blah" && printf 'Vous êtes dans le répertoire %b.' $PWD


??? Pourquoi %b ? Manque des quotes, a moins que le shell ne soit
zsh.

cd "blah" &&
printf 'Vous êtes dans le répertoire %s.n' "$PWD"

--
Stéphane


Avatar
Thomas
In article ,
Stephane Chazelas wrote:

2007-09-08, 17:57(+02), Thomas:
In article ,
Matthieu Moy wrote:

Thomas writes:

ah ben non,
j'ai essayé (sans rien mettre devant le nom du fichier, comme dans le
terminal), ça ne marche pas !


./mon-executable.sh

source ./mon-executable.sh


si je met

source ../fichiers-initialisation/alias
au lieu de
source ~/Administration/shell/fichiers-initialisation/alias

dans
~/Administration/shell/demarrage/profile

ça me donne
-bash: ../fichiers-initialisation/alias: No such file or directory
[...]


Les chemins relatifs sont relatifs au chemin courant (ce que
retourne la command pwd), pas a un des repertoire qui contient
ton script.


c'est bien ce que je pensais, dommage qu'il n'y ait pas de solution


Utilise une variable:

LIBDIR=~/Administration/shell
. "$LIBDIR/fichiers-initialisation/alias"


merci, tant pis


... je pense à un truc

même si ça va pas marcher pour les "source", y a peut être une solution
pour les sous-shells

dans les logiciels, on a moyen de récupérer la ligne de commande
complète, avec le nom de la commande et le chemin si il y est
il n'y a pas moyen de récupérer le chemin de la commande de cette
manière là ?

--
j'agis contre l'assistanat, je travaille dans une SCOP !




Avatar
Thomas
In article ,
Stephane Chazelas wrote:

2007-09-9, 00:14(+02), Nicolas S.:
Thomas a écrit:

en fait je veux juste être ailleurs que dans mon dossier de départ
quand j'ouvre le terminal
donc ça marche pas si je met le cd dans un sous-shell


Si c'est vraiment ce que tu veux, tu peux rajouter un truc de ce genre
en toute fin de ton ~/.profile:
cd "blah" && printf 'Vous êtes dans le répertoire %b.' $PWD


??? Pourquoi %b ? Manque des quotes, a moins que le shell ne soit
zsh.

cd "blah" &&
printf 'Vous êtes dans le répertoire %s.n' "$PWD"


merci :-)

--
j'agis contre l'assistanat, je travaille dans une SCOP !



Avatar
Marc
Thomas wrote:

... je pense à un truc

même si ça va pas marcher pour les "source", y a peut être une solution
pour les sous-shells

dans les logiciels, on a moyen de récupérer la ligne de commande
complète, avec le nom de la commande et le chemin si il y est
il n'y a pas moyen de récupérer le chemin de la commande de cette
manière là ?


Tu penses à `dirname "$0"` ? (ce n'est pas d'une fiabilité à toute
épreuve mais pour ce que tu fais ça a des chances de marcher)

Avatar
Stephane Chazelas
2007-09-9, 18:07(+00), Marc:
Thomas wrote:

... je pense à un truc

même si ça va pas marcher pour les "source", y a peut être une solution
pour les sous-shells

dans les logiciels, on a moyen de récupérer la ligne de commande
complète, avec le nom de la commande et le chemin si il y est
il n'y a pas moyen de récupérer le chemin de la commande de cette
manière là ?


Tu penses à `dirname "$0"` ? (ce n'est pas d'une fiabilité à toute
épreuve mais pour ce que tu fais ça a des chances de marcher)


Pas pour des scripts sourcés. Toutefois, avec des versions
recentes de bash, on peut utiliser la variable de type array
$BASH_SOURCE.

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)

devrait retourner le chemin absolu du script sourcé.

Cela dit "$0" marche pour les scripts non-sourcés et si un
script source un autre script, alors il connait deja son chemin,
donc il peut tres bien le mettre dans une variable.

--
Stéphane


Avatar
Matthieu Moy
Stephane Chazelas writes:

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
^^ ^^


C'est pas un pléonasme, ça ?

(c'est une vraie question, venant de toi, je soupçonne qu'il y ait une
bonne raison ;-) ).

Cela dit "$0" marche pour les scripts non-sourcés et si un
script source un autre script, alors il connait deja son chemin,
donc il peut tres bien le mettre dans une variable.


Tout à fait.

Typiquement

MY_LIBDIR="$(cd -P "$(basename "$0")" && pwd)"/lib
source "${MY_LIBDIR}"/fichier1.sh

Et dans fichier1.sh, on peut continuer à utiliser ${MY_LIBDIR}.

--
Matthieu

Avatar
Stephane Chazelas
2007-09-10, 08:28(+02), Matthieu Moy:
Stephane Chazelas writes:

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
^^ ^^


C'est pas un pléonasme, ça ?
[...]


Non, cd est un shortcut pour cd -L, pas cd -P.

~$ cd tmp
~/tmp$ ln -s . here
~/tmp$ cd here/here/here
~/tmp/here/here/here$ cat > ~/a
echo "${BASH_SOURCE[0]}"
(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
~/tmp/here/here/here$ . ../a
../a
/home/chazelas/tmp/here/here
/home/chazelas

Dans les scripts, c'est une bonne habitude de ne jamais utiliser
cd sans -P.

--
Stéphane


Avatar
Matthieu Moy
Stephane Chazelas writes:

2007-09-10, 08:28(+02), Matthieu Moy:
Stephane Chazelas writes:

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
^^ ^^


C'est pas un pléonasme, ça ?
[...]


Non, cd est un shortcut pour cd -L, pas cd -P.


Oui, mais si tu met « cd -P », pas la peine de faire « pwd -P », non ?

--
Matthieu



Avatar
Stephane Chazelas
2007-09-10, 14:25(+02), Matthieu Moy:
Stephane Chazelas writes:

2007-09-10, 08:28(+02), Matthieu Moy:
Stephane Chazelas writes:

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
^^ ^^


C'est pas un pléonasme, ça ?
[...]


Non, cd est un shortcut pour cd -L, pas cd -P.


Oui, mais si tu met « cd -P », pas la peine de faire « pwd -P », non ?


En theorie, oui. Mais comme pwd (cad pwd -L) veut dire "chemin
logique courant" et que je suis interessé par le chemin physique
courant, je trouve ca plus coherent d'utiliser pwd -P meme si a
cet instant precis les chemin logique et physique sont les
memes.

--
Stéphane




Avatar
Thomas
In article ,
Stephane Chazelas wrote:

2007-09-9, 18:07(+00), Marc:
Thomas wrote:

... je pense à un truc

même si ça va pas marcher pour les "source", y a peut être une solution
pour les sous-shells

dans les logiciels, on a moyen de récupérer la ligne de commande
complète, avec le nom de la commande et le chemin si il y est
il n'y a pas moyen de récupérer le chemin de la commande de cette
manière là ?


Tu penses à `dirname "$0"` ? (ce n'est pas d'une fiabilité à toute
épreuve mais pour ce que tu fais ça a des chances de marcher)



merci bcp :-)

y a pas de possibilité si le script est dans le path et qu'on tape son
nom directement ?


Pas pour des scripts sourcés. Toutefois, avec des versions
recentes de bash, on peut utiliser la variable de type array
$BASH_SOURCE.

(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)

devrait retourner le chemin absolu du script sourcé.


ça ne marche pas chez moi :-(
peut être que j'ai un bash pas assez récent ...


tant pis, c'est deja ça, merci :-)

--
j'agis contre l'assistanat, je travaille dans une SCOP !



1 2 3 4 5