OVH Cloud OVH Cloud

~ et zsh

6 réponses
Avatar
Rakotomandimby (R12y) Mihamina
Bonjour

J'ai eu la frayeur de ma vie aujourd'hui. Sur un serveur enproduction sur
lequel il fallait faire une modification mineure, j'ai fait ça:

$ pwd
/home/mihamina/sansvin/public
$ ls
films little
$ mv films ~
$ ls
~ little


Ah merde... bon OK:

$ mv ~ films

Putain! il a balancé tout mon $HOME dans 'films'
Comme dans films il y avait uniquement des fichiers a extensions .avi,
j'ai rattrapé le coup, mais putain, pourquoi un mv dans un sens a un
comportement différent dans l'autre?

PS: excusez la grossiereté mais j'ai pas pour habitude de tester les
déplacement de repertoires sur un serveur de test... et franchement
déplacer un repertoire, ça se fait même sur un serveur en production
quoi!...

--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

6 réponses

Avatar
Stephane Chazelas
2005-04-14, 21:22(+02), Rakotomandimby (R12y) Mihamina:
Bonjour

J'ai eu la frayeur de ma vie aujourd'hui. Sur un serveur enproduction sur
lequel il fallait faire une modification mineure, j'ai fait ça:

$ pwd
/home/mihamina/sansvin/public
$ ls
films little
$ mv films ~
$ ls
~ little


Ah merde... bon OK:

$ mv ~ films

Putain! il a balancé tout mon $HOME dans 'films'
[...]


Ya pas de raison.

Tu es sur que tu n'as rien tapé avant ou apres le ~ dans le
premier cas. Tu as fait un copier-coller?

Le ~ est toujours dans /home/mihamina/sansvin/public?

Que dit:

files=(*)
printf '<%s>n' ${(V)files}

dans ce repertoire?

Tu as un history file? Ca vaudrait le coup de voir ce que tu as
tapé exactement. grep films $HISTFILE | cat -vte

Ou si le shell n'est pas terminé:

fc -l 0 | grep films | cat -vte

Comme dans films il y avait uniquement des fichiers a extensions .avi,
j'ai rattrapé le coup, mais putain, pourquoi un mv dans un sens a un
comportement différent dans l'autre?o


Ya pas de raison, ~ aurait du etre expandé en /home/mihamina
dans les deux cas.

Quelle version de zsh?

Peux-tu reproduire le probleme, que dit:

print -raC2 -- ${(kv)options}

--
Stéphane

Avatar
Rakotomandimby (R12y) Mihamina
( Thu, 14 Apr 2005 21:24:51 +0100 ) Stephane Chazelas :

2005-04-14, 21:22(+02), Rakotomandimby (R12y) Mihamina:
Bonjour

J'ai eu la frayeur de ma vie aujourd'hui. Sur un serveur enproduction sur
lequel il fallait faire une modification mineure, j'ai fait ça:

$ pwd
/home/mihamina/sansvin/public
$ ls
films little
$ mv films ~
$ ls
~ little


Ah merde... bon OK:

$ mv ~ films

Putain! il a balancé tout mon $HOME dans 'films'
[...]




Ya pas de raison.

Tu es sur que tu n'as rien tapé avant ou apres le ~ dans le
premier cas. Tu as fait un copier-coller?

Le ~ est toujours dans /home/mihamina/sansvin/public?


mihamina-mfc>>>>print $HOME
/home/mihamina

mihamina-mfc>>>>cd ~

mihamina-mfc>>>>pwd
/home/mihamina

Que dit:
files=(*)
printf '<%s>n' ${(V)files}


mihamina-mfc>>>>pwd
/home/mihamina/sansvin/public
mihamina-mfc>>>>ls
uffff~ films little
mihamina-mfc>>>>files=(*)
mihamina-mfc>>>> printf '<%s>n' ${(V)files}
<uffff~>
<films>
<little>


PS: Dans la console (gnome-terminal) quand je tape ces lignes, le uffff
n'est pas affiché. Il n'apparait qu'apres le copier/coller dans Pan. Je
vous l'ai mis parceque j'ai rien compris à ce que ça signifie.


Tu as un history file? Ca vaudrait le coup de voir ce que tu as
tapé exactement. grep films $HISTFILE | cat -vte



mihamina-mfc>>>>grep films ~/.zhistory
: 1113508061:0;mkdir films ; mv *.avi films/
: 1113508279:0;mv films uffff~
: 1113508289:0;mv ~ films
: 1113508334:0;cd films
: 1113516012:0;grep films ~/.zhistory
mihamina-mfc>>>>

Ou si le shell n'est pas terminé:


Il l'est.

Ya pas de raison, ~ aurait du etre expandé en /home/mihamina
dans les deux cas.
Quelle version de zsh?


mihamina-mfc>>>>zsh --version
zsh 4.2.0 (i386-redhat-linux-gnu)

Peux-tu reproduire le probleme, que dit:

print -raC2 -- ${(kv)options}


mihamina-mfc>>>>print -raC2 -- ${(kv)options}
autolist on
printexitvalue off
histreduceblanks on
chaselinks off
extendedglob off
histnostore off
automenu on
globcomplete off
unset on
listpacked off
promptsubst off
shwordsplit off
pathdirs off
kshtypeset off
listtypes on
promptbang off
dotglob off
braceexpand on
listbeep on
correctall off
privileged off
numericglobsort off
histverify on
trackall on
cbases off
rcquotes off
histfindnodups off
bashautolist off
sharehistory on
overstrike off
kshautoload off
incappendhistory on
promptcr on
mailwarn off
pushdignoredups off
interactive on
ignoreeof off
globsubst off
monitor on
histbeep off
magicequalsubst off
rmstarsilent off
hashcmds on
extendedhistory on
notify on
kshoptionprint off
histexpiredupsfirst on
glob on
braceccl off
badpattern on
longlistjobs off
banghist off
dvorak off
alwaystoend off
hashall on
globalexport on
ksharrays off
correct off
autonamedirs off
histexpand off
typesetsilent off
rmstarwait off
histnofunctions off
autoparamslash on
sunkeyboardhack off
histsavenodups off
autocd off
allexport off
cshjunkiehistory off
autopushd off
completeinword off
completealiases off
aliases on
autocontinue off
appendhistory on
singlelinezle off
hashlistall on
recexact off
localoptions off
interactivecomments off
errexit off
cshjunkiequotes off
markdirs off
hashdirs on
cdablevars off
rcexpandparam off
vi off
printeightbit off
xtrace off
login on
cshjunkieloops off
histappend on
histignorespace off
shfileexpansion off
rcs on
functionargzero on
errreturn off
histignoredups on
beep on
autoremoveslash on
hup on
globdots off
autoparamkeys on
shnullcmd off
zle on
promptpercent on
flowcontrol on
autoresume off
globassign off
caseglob on
shortloops on
bsdecho off
log on
transientrprompt off
verbose off
ignorebraces off
equals on
menucomplete off
cshnullglob off
promptvars off
histallowclobber off
bareglobqual on
shinstdin on
restricted off
pushdminus off
nullglob off
chasedots off
mailwarning off
listambiguous on
cshnullcmd off
octalzeroes off
exec on
multios on
emacs off
nomatch on
localtraps off
stdin on
onecmd off
kshglob off
clobber on
posixbuiltins off
alwayslastprompt on
pushdtohome off
histignorealldups off
pushdsilent off
shoptionletters off
physical off
bgnice on
globalrcs on
checkjobs on
shglob off
singlecommand off
listrowsfirst off

--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)


Avatar
Stephane Chazelas
2005-04-14, 23:07(+02), Rakotomandimby (R12y) Mihamina:
[...]
mihamina-mfc>>>> printf '<%s>n' ${(V)files}
<uffff~>
<films>
<little>


PS: Dans la console (gnome-terminal) quand je tape ces lignes, le uffff
n'est pas affiché. Il n'apparait qu'apres le copier/coller dans Pan. Je
vous l'ai mis parceque j'ai rien compris à ce que ça signifie.
[...]


uffff est le caractere unicode 0xffff a priori, ce qui serait
plutot louche, m'est avis que Pan utilise ca pour "caractere
invalide".

Que dit:

ls | LC_ALL=C od -tc

Visiblement, il y a un caractere a priori invisible avant le ~
ce qui explique que zsh ne l'expande pas.

--
Stéphane

Avatar
Rakotomandimby (R12y) Mihamina
( Thu, 14 Apr 2005 22:55:07 +0100 ) Stephane Chazelas :
Que dit:
ls | LC_ALL=C od -tc


mihamina-mfc>>> ls | LC_ALL=C od -tc
0000000 303 ~ n f i l m s n l i t t l e n
0000020

Visiblement, il y a un caractere a priori invisible avant le ~
ce qui explique que zsh ne l'expande pas.


Effectivement.
Mais moi je n'ai entré aucun caractère invalide quand j'ai voulu bouger
"films" dans mon HOME.
J'ai entré 'mv films ~'

Je suis sur une Fedora (qui est connue pour aimer le utf-8) et la machine
distante est aussi une Fedora (elle sont jumelles, au paquets -dev près).


--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

Avatar
Stephane Chazelas
2005-04-15, 00:13(+02), Rakotomandimby (R12y) Mihamina:
( Thu, 14 Apr 2005 22:55:07 +0100 ) Stephane Chazelas :
Que dit:
ls | LC_ALL=C od -tc


mihamina-mfc>>> ls | LC_ALL=C od -tc
0000000 303 ~ n f i l m s n l i t t l e n
0000020
[...]


303 n'est pas un caractere valide en UTF-8, mais ca ressemble
au debut de é par exemple (303 251).

Je parierais que tu as tapé:

mv films é<Backspace>~

zsh 4.2.0 n'est pas UTF-8 aware, pour lui un charactere est un
byte, la frappe de backspace lui fait enlever un seul
charactere: le 251.

Essaie:

print -r mv films é<Backspace>~ | LC_ALL=C od -tc

(ou <Backspace> est la frappe de la touche).

--
Stéphane


Avatar
Rakotomandimby (R12y) Mihamina
( Thu, 14 Apr 2005 23:34:47 +0100 ) Stephane Chazelas :
print -r mv films é<Backspace>~ | LC_ALL=C od -tc


mihamina-mfc>>>>print -r mv films uffff~ | LC_ALL=C od -tc
0000000 m v f i l m s 303 ~ n
0000014

Effectivement, en copie/collant dans le newsreader, ça redonne uffff .
Le curseur se déplace de 2 caractères "blancs" si je tape "é", et ne
revient que d'un caractère si je fait <backspace>.

Le problème vient de la... d'autant plus que c'est probable car
effectivement "é" et "~" sont sur la même touche...

--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)