OVH Cloud OVH Cloud

Message d'erreur pendant un script

30 réponses
Avatar
Oleane Newsgroup
Bonjour !

avec KSH, j'utilise la commande 'cp /usr1/appli/data /export/donnees' pour
faire une copie du répertoire data vers le répertoire donnees. cela
fonctionne très bien !

mais dans un script, la même commande génère un message d'erreur :
exdata[6]: /bin/cp: 0403-027 Liste de paramètres trop longue.

exdata est le nom de mon script

Avez-vous une idée pour cette erreur ?

Merci

10 réponses

1 2 3
Avatar
Eric Masson
Moi writes:

'Lut,

Sur les Unix à deux balles, style *.BSD, sh c'est sh.


C'est quoi un unix à deux balles ?

--
Je ne suis pas d'accord. Je ne vois pas pourquoi il faudrait savoir
réfléchir pour faire des AAD. C'est du pur racisme envers les
participants actuels d'un groupe bientôt défunt.
-+- MH in : <http://www.le-gnu.net> - So live and let split -+-

Avatar
Stephane Chazelas
2006-12-12, 18:50(+01), Moi:


ksh != sh
même si ce sont des bournes, ils peuvent réagir différement


Sur la plupart des Unix commerciaux, ksh == sh
ksh est une implementation du sh standard.


Sur les Unix à deux balles, style *.BSD, sh c'est sh.


Sur tous les Unix, sh, c'est a dire une implementation ou une
autre du "sh" defini par la single unix specification ou
eventuellement.

En l'occurrence, sur les BSD, il s'agit d'un shell derivé du
Almquist shell.

Le Bourne shell est un vieux shell qu'on ne trouve aujourd'hui
que sous tres peu d'OS et encore que pour backward compatibility
pour des tres vieux scripts. Le Bourne shell n'est d'ailleurs
pas un sh standard.


Pourquoi, bash c'est "standard" peut-être ?


bash quand appelé "sh" est quasi POSIX conformant avec certaines
extensions XSI mais pas toutes comme le sh des BSDs.

L'exception la plus significative est son "echo" qui devrait
afficher "-e<NL>" dans "echo -e" pour etre POSIX et qui devrait
afficher "<NL>" dans echo 'nc' pour etre Unix (mais le
comportement de echo pour bash peut etre modifié par une option
de compilation).

Beaucoup de sh non-basés sur bash ont d'ailleurs le meme
probleme. POSIX et Unix recommandent de toutes facons de ne pas
utiliser echo.

[...]
Un lien "bash" à la Linux ?


Un lien vers bash est probablement ce qu'il y a de plus proche
de ce qui est specifié a

http://www.opengroup.org/onlinepubs/009695399/toc.htm

--
Stéphane



Avatar
fabrizio
12/12/2006 19:15 - Eric Masson :
Moi writes:
Sur les Unix à deux balles, style *.BSD, sh c'est sh.
C'est quoi un unix à deux balles ?



Un troll à deux têtes.


Avatar
lhabert
Stephane Chazelas :

Un lien vers bash est probablement ce qu'il y a de plus proche
de ce qui est specifié a

http://www.opengroup.org/onlinepubs/009695399/toc.htm


Quels sont les non-conformités de dash?

Avatar
Stephane Chazelas
2006-12-12, 18:50(+00), Luc Habert:
Stephane Chazelas :

Un lien vers bash est probablement ce qu'il y a de plus proche
de ce qui est specifié a

http://www.opengroup.org/onlinepubs/009695399/toc.htm


Quels sont les non-conformités de dash?


echo -n -e vs echo 'c...'

comme je disais est la plus notable.

Pour le reste, c'est des bugs ou des coins pas clairs de la
spec.

Par exemple:


a=b=c,d
d=foo
IFS=,

export $a

n'exporte pas la variable "d"

$ bash -c 'printf "<%s>n" ${a-foo "" ""}'
<foo>

Pas beaucoup mieux avec ksh:

$ ksh -c 'printf "<%s>n" ${a-foo "" ""}'
<foo>
<>

(mieux avec pdksh et zsh).

IFS set a b
a=$*

Je crois qu'il y a des choses a redir dans la gestion des
signaux et des pipes aussi.

En general, les non-conformances, quand elles sont identifiees,
sont assez vite fixees. Ya juste pour echo que c'est vraiment
deliberé.

Le support d'UTF8 n'est pas encore tout-a-fait au point, ce qui
peut donner des surprise:

~$ a=$(LC_ALL=fr_FR.UTF-8 printf 'u20ac')
~$ export a
~$ LC_ALL=fr_FR.UTF-8 bash -c 'printf "%dn" ""$a"'
-30
~$ LC_ALL=fr_FR.UTF-8 bash -c 'printf "%un" ""$a"'
18446744073709551586

(a peine mieux avec zsh, ksh ou GNU printf).

--
Stéphane


Avatar
lhabert
Stephane Chazelas :

Quels sont les non-conformités de dash?


echo -n -e vs echo 'c...'

comme je disais


J'ai dit « dash », pas « bash ».

a=b=c,d
d=foo
IFS=,

export $a

n'exporte pas la variable "d"


Gasp! Je ne savais que la norme autorisait cette horreur.


Avatar
Moi

Lo '

Sur les Unix à deux balles, style *.BSD, sh c'est sh.


C'est quoi un unix à deux balles ?


Un truc en libre service que tu graves sur 2 ou 3 CD
Le prix des CD vierges
Et puis, c'est écrit plus haut: [Net|Free|Open]BSD


Avatar
Stephane Chazelas
2006-12-12, 20:35(+00), Luc Habert:
Stephane Chazelas :

Quels sont les non-conformités de dash?


echo -n -e vs echo 'c...'

comme je disais


J'ai dit « dash », pas « bash ».


La, ca evolue aussi.

dash est basé sur le sh de soit OpenBSD soir NetBSD, je sais
plus.

Ya "[" qui n'est pas standard.

[ ! = ! ]

renvoie false (enfin une erreur)

ce qui fait que [ "$a" = "$b" ] ne marche pas.

a=b=c,d
d=foo
IFS=,

export $a

n'exporte pas la variable "d"


Gasp! Je ne savais que la norme autorisait cette horreur.


Quelle "horreur"?

D'apres POSIX, "export" est une simple command comme une autre.

Donc

export $a

devrait etre parsé comme n'importe quelle

cmd $a

il n'y a pas de raison pour laquelle l'expansion de $a devrait
etre faite differemment dans le cas d'export et pour les autres
commandes. ash/dash, pdksh et zsh se comportent normalement, pas
ksh ni bash. Pour ksh, c'est parce que "export" est plutot un
attribut d'un assignment qu'une builtin command, pour bash,
c'est pas clair.

--
Stéphane



Avatar
Moi


Sur tous les Unix, sh, c'est a dire une implementation ou une
autre du "sh" defini par la single unix specification ou
eventuellement.



En l'occurrence, sur les BSD, il s'agit d'un shell derivé du
Almquist shell.


Toutafé, j'ai regardé les sources de NetBSD, c'est Kenneth Almquist
qui l'a écrit en 1989. On le trouve également sous le nom de ash.
En attendant il est suffisant pour exécuter toute la scriptitude
contenue dans un /etc ou pour faire la même chose sur petite machine.

bash quand appelé "sh" est quasi POSIX conformant avec certaines
extensions XSI mais pas toutes comme le sh des BSDs.


Oui quand le lien est invoqué il change de mode.
Si je me souviens bien des sources il y avait un coup de basename(3)
au début

L'exception la plus significative est son "echo" qui devrait
afficher "-e<NL>" dans "echo -e" pour etre POSIX et qui devrait
afficher "<NL>" dans echo 'nc' pour etre Unix (mais le
comportement de echo pour bash peut etre modifié par une option
de compilation).


qui va s'amuser à recompiler ?

Beaucoup de sh non-basés sur bash ont d'ailleurs le meme
probleme. POSIX et Unix recommandent de toutes facons de ne pas
utiliser echo.


quel "echo" est exécuté dans un script ?
le builtin ou l'autre ?
je pense au builtin

Un lien vers bash est probablement ce qu'il y a de plus proche
de ce qui est specifié a
http://www.opengroup.org/onlinepubs/009695399/toc.htm


En attendant l'abus de basherie nuit gravement à l'exécution de commande
simples. Il y a peu j'ai voulu compiler un truc sur NetBSD et oh
surprise. Ca s'arrête en plein milieu. Il faut bash. Un simple lien
bash-sh a résolu le problème. la basherie était inutile

Avatar
Moi

$ bash -c 'printf "<%s>n" ${a-foo "" ""}'
<foo>


on peut avoir le même avec sh ??

~$ a=$(LC_ALL=fr_FR.UTF-8 printf 'u20ac')
~$ export a
~$ LC_ALL=fr_FR.UTF-8 bash -c 'printf "%dn" ""$a"'
-30
~$ LC_ALL=fr_FR.UTF-8 bash -c 'printf "%un" ""$a"'
18446744073709551586



même question que supra

1 2 3