Page 1 sur 1

[bash] fonction swap (résolu)

Publié : mar. 12 janv. 2016, 12:48
par Piczel
Bonjour tout le monde, suite à une multitude de fois où j'ai interverti le nom de deux fichiers, j'me suis dit que j'allais faire une fonction SWAP que voilà :

Code : Tout sélectionner

function SWAP(){
	local TMPFILE=tmp.$$
	cp "$1" $TEMPFILE
	mv "$2" "$1"
	mv $TEMPFILE "$2"
}
(j'ai aucune notion de bash, excusez mon erreur)

mais cette fonction ne marche pas.. (c'est dans mon .zshrc)
prenons un exemple : deux fichiers ABC avec abc dedans, et DEF, avec def

SWAP ABC DEF, après je me retrouve juste avec def dans ABC.. une idée ?..

J'avais pensé à faire tout ça avec cat, mais ça me semblait juste plus lourd, plus long, et moins pratique

Qu'en pensez vous ?
Merci, bonen journée !

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:02
par Moviuro

Code : Tout sélectionner

% set -x; SWAP ABC DEF
% set +x

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:03
par Piczel
merci!
ça change quoi set -x et set +x ?

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:09
par Moviuro
ça va faire cracher plein de choses à ton terminal, entre autres ce qui se passe réellement lorsque tu lances ta fonction. ça ressemblera à un truc (plus court) comme ça

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:13
par Piczel
okep merci, tiens voilà le résultat :

Code : Tout sélectionner

+-zsh:5> SWAP ABC DEF
+SWAP:1> local TMPFILE=tmp.1716
+SWAP:2> cp ABC
cp: opérande de fichier cible manquant après << ABC >>
Saisissez << cp --help >> pour plus d'informations.
+SWAP:3> mv DEF ABC
mv: impossible d'évaluer << DEF >>: Aucun fichier ou dossier de ce type
+SWAP:4> mv DEF
mv: opérande de fichier cible manquant après << DEF >>
Saisissez << mv --help >> pour plus d'informations.
ok, le problème est dans la 2e ligne du truc, avec le $TMPFILE

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:15
par Piczel
le con !!! regarde, j'appelle $TMPFILE, et mon truc s'appelle TEMPFILE..

EDIT : même en changeant, ça marche pas.. toujours la même erreur

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:45
par Moviuro
Tu as fais une typo, je te laisse résoudre ;)

:copain:

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:53
par Piczel
Ben.. ça bloque toujours à

Code : Tout sélectionner

+SWAP:4> mv DEF
mv: opérande de fichier cible manquant après << DEF >>
alors que le local, cp, et le premier mv marche très bien ..

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 13:58
par Moviuro
typo, bis repetitas

Re: [bash] fonction swap

Publié : mar. 12 janv. 2016, 14:07
par Piczel
effectivement, manquait juste des guillemets, merci mon ami !

voici le SWAP final :

Code : Tout sélectionner

function SWAP(){
	local TMPFILE=tmp.$$
	cp "$1" "$TMPFILE"
	mv "$2" "$1"
	mv "$TMPFILE" "$2"
}

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 14:24
par Moviuro
Au passage, tu devrais utiliser : cp --reflink=auto -- au lieu de cp et mv -- au lieu de mv pour ne pas planter sur des fichiers au nom exotique ;)

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 14:30
par Piczel
Je regarde ça plus tard suis occupé là, merci à toi !

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 18:02
par Piczel
Bon j'ai regardé, je vois pas ce que c'est mv -- et cp --, les -- c'est pas pour ajouter des options normalement ?

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 18:04
par benjarobin
Non au contraire les "--" c'est pour indiquer que tout ce qui suit ne sont pas des options, mais des fichiers.

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 18:41
par Piczel
du coup.. cp -- fichier1 fichier2 fait exactement pareil que cp fichier1 fichier2, mais on le rajoute par précaution, au cas où le nom est trop compliqué c'est ça ?

Re: [bash] fonction swap (solved)

Publié : mar. 12 janv. 2016, 18:43
par benjarobin
oui

Re: [bash] fonction swap (résolu)

Publié : mar. 12 janv. 2016, 20:56
par Piczel
super merci !