#1 Le 09/02/2013, à 20:06
- soupaloignon
[Abandonné] combiner un script bash et ncftp
Bonjour à tous,
Je planche en ce moment sur un script bash permettant de modifier, ou pas, le nom d'un dossier sur un serveur distant.
Utilité : Je travaille avec un ami qui fait des présentations de fonctionnalités d'un logiciel. Pour cela il utilise des captures d'écran du logiciel en question, que je lui ai installé sur un script php de galerie photos. Le truc c'est que l'on voudrait qu'en dehors des présentations la galerie ne soit plus accessible, même si une personne en possède l'url.
Solution simple, renommer le dossier contenant le script de la galerie photo. En mode fonctionnement le dossier s'appelle "demo", lorsque on veut le rendre inaccessible je le renomme en "demoXXX" vie FireFTP et le tour est joué.
Le problème c'est que cela suppose qu'il me prévienne que pour telle date, telle heure, le dossier doit être ouvert, et qu'il me prévienne ensuite de le refermer, ce qui est lourd à gérer.
L'idée serait donc de lui installer sur son ordi un script bash qui vérifierait l'état du dossier (ouvert ou fermé) et proposerait soit de le fermer s'il est ouvert, soit de l'ouvrir s'il est fermé, ou soit de ressortir sans rien faire, qu'il soit ouvert ou fermé.
Et c'est là que ça se complique. En bash pur, par rapport à un dossier en local cela ne me poserait pas trop de problème (enfin je pense ), mais à distance je ne vois pas trop comment faire, ou plutôt je ne sais pas par quel bout attaquer.
(désolé de ce long préambule, mais je voulais bien poser la situation)
Si j'attaque le script via ncftp, du genre :
ncftp -u $login -p $pass -l $host << EOF
ls | grep demo
Bon, ça me dit si le dossier existe ou pas (donc si c'est ouvert ou fermé) mais ensuite je ne sais pas quoi faire avec ça. D'autant que je n'ai pas su faire fonctionner un if et else une fois à l'intérieur du serveur.
Autre approche:
if [ ncftp -u $login -p $pass $host -d demo ] ; then
echo
zenity --info --title="" --text="Le dossier est ouvert"
else
echo
zenity --info --title="" --text="Le dossier est fermé"
exit
fi
(avec ça je sais que cela ne fait que me dire si le dossier existe ou pas. Mais si ça fonctionne il n'y a qu'à inclure un mv en fonction du retour. Cela sera dans un 2èeme temps)
Et là ça vautre lamentablement, je n'arrive pas à trouver la bonne syntaxe pour aller vérifier la présence du dossier demo en passant par ncftp
Donc si vous avez des pistes sur la manière d'attaquer le problème (1ere ou 2eme approche) cela serait déjà un grand pas en avant pour moi
Dernière modification par soupaloignon (Le 10/02/2013, à 19:56)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#2 Le 09/02/2013, à 21:23
- xavier4811
Re : [Abandonné] combiner un script bash et ncftp
Bonsoir,
pas besoin des [ ]
if ncftp -u $login -p $pass $host -d demo > /dev/null ; then
zenity --info --title="" --text="Le dossier est ouvert"
else
zenity --info --title="" --text="Le dossier est fermé"
exit
fi
ça le fait pas ?
if curl -m 10 -u "user:passwd" -s "ftp://host/path/to/demo/" > /dev/null; then then zenity --info --text="ouvert"; else zenity --info --text="fermé"; fi
avec curl ça marche alors...
Hors ligne
#3 Le 09/02/2013, à 22:03
- xavier4811
Re : [Abandonné] combiner un script bash et ncftp
2 en 1 :
if curl -m 10 -u "user:password" -s "ftp://host/path/to/demo/" > /dev/null; then then zenity --info --text="le dossier est ouvert" && curl -v -m 10 -u "user:password" -Q "RNFR demo" -Q "RNTO demoXXX" ftp://host; else zenity --info --text="dossier fermé"; fi
Hors ligne
#4 Le 09/02/2013, à 23:51
- soupaloignon
Re : [Abandonné] combiner un script bash et ncftp
Bonsoir xavier4811,
Merci pour tes réponses, mais aucun des scripts ne fonctionnent.
Le 1er renvoi toujours "Le dossier est fermé" que le dossier s'appelle demo ou demoXXX. Sur le terminal il y a ce retour
*** Error: gl_getline(): not interactive, use stdio.
Les 2 autres avec curl ferment directement le termina
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#5 Le 10/02/2013, à 00:04
- xavier4811
Re : [Abandonné] combiner un script bash et ncftp
not interactive, use stdio.
tu est sur qu'on peut passer tous les paramètres a ncftp dans un script ?
Effectivement, la ligne du post 3 ne fonctionne pas avec demo et demoXXX, par contre elle fonctionne avec demo et private par exemple. Bizarre ça.
Edit
-------------
Si si ça fonctionne, après un essai raté sans que je sache pourquoi.
if curl -m 10 -u "xavier:XXXXXXXX" -s "ftp://192.168.1.250/test/" > /dev/null; then zenity --info --text="ouvert" && curl -v -m 10 -u "xavier:XXXXXXXX" -Q "RNFR demo" -Q "RNTO demoXXX" ftp://192.168.1.250; else zenity --info --text="fermé"; fi
* About to connect() to 192.168.1.250 port 21 (#0)
* Trying 192.168.1.250... connected
< 220 Welcome to my FTP service.
> USER xavier
< 331 Please specify the password.
> PASS XXXXXXXX
< 230 Login successful.
> PWD
< 257 "/home/xavier"
* Entry path is '/home/xavier'
> RNFR demo
< 350 Ready for RNTO.
> RNTO demoXXX
< 250 Rename successful.
> EPSV
* Connect data stream passively
< 229 Entering Extended Passive Mode (|||31598|).
* Trying 192.168.1.250... connected
* Connecting to 192.168.1.250 (192.168.1.250) port 31598
> TYPE A
< 200 Switching to ASCII mode.
> LIST
< 150 Here comes the directory listing.
* Maxdownload = -1
.....
drwxrwxr-x 2 1000 1000 4096 Feb 10 00:00 demoXXX
.....
* Remembering we are in dir ""
< 226 Directory send OK.
* Connection #0 to host 192.168.1.250 left intact
> QUIT
< 221 Goodbye.
* Closing connection #0
Dernière modification par xavier4811 (Le 10/02/2013, à 00:12)
Hors ligne
#6 Le 10/02/2013, à 17:05
- soupaloignon
Re : [Abandonné] combiner un script bash et ncftp
Effectivement, la ligne du post 3 ne fonctionne pas avec demo et demoXXX, par contre elle fonctionne avec demo et private par exemple. Bizarre ça.
En fait il y avait 2 "then" qui se suivait dans la ligne du post 3. ceci explique peut être cela.
J'ai passé du temps la dessus, mais sans arriver à un résultat probant. Donc finalement j'ai laissé tomber l'idée de le faire en bash, et je l'ai fait en php directement. Un puriste pourrait certainement redire sur le code, mais ça marche.
Merci pour ton aide en tout cas
Dernière modification par soupaloignon (Le 10/02/2013, à 17:14)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne