IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [RÉSOLU] SHELL SCRIPT : monter/démonter un volume
Options
clarusad
posté 6 Jan 2017, 10:06
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 229
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



Salut,
J'ai écrit un petit script qui me permet de monter ou de démonter un volume en fonction de la présence de ce dernier.
Il fonctionne, mais ça semble pas très propre car le terminal me retourne une erreur.
Qu'en pensez-vous ?
Code
#!/bin/sh
if [ ! `mount | grep DATA` ]
then
    diskutil mountDisk /dev/disk1s2
else
    diskutil unmount /dev/disk1s2
fi

Merci

Ce message a été modifié par clarusad - 8 Jan 2017, 14:49.
Go to the top of the page
 
+Quote Post
yponomeute
posté 6 Jan 2017, 10:30
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 584
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



On est autorisé à connaitre l'erreur renvoyée ou il faut jouer aux devinettes ?


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
clarusad
posté 6 Jan 2017, 17:36
Message #3


Adepte de Macbidouille
*

Groupe : Membres
Messages : 229
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



Effectivement : ça peut aider à m'aider ^^
Code
./script: line 2: [: too many arguments
Go to the top of the page
 
+Quote Post
yponomeute
posté 6 Jan 2017, 18:21
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 584
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Ah c'est un classique ça. C'est le résultat de mount | grep DATA qui contient plusieurs mots séparés par des espaces, donc tu as des arguments en trop dans ton test.

Essaie avec les doubles [[ ]], mais faut passer sur du bash, il me semble que c'est pas reconnu avec sh.

Code
#!/bin/bash
if [[ ! `mount | grep DATA` ]]
then
    diskutil mountDisk /dev/disk1s2
else
    diskutil unmount /dev/disk1s2
fi


ou alors avec des doubles quotes

Code
#!/bin/sh
if [ ! "$(mount | grep DATA)" ]
then
    diskutil mountDisk /dev/disk1s2
else
    diskutil unmount /dev/disk1s2
fi


Edit : correction second exemple, suppression doubles crochets

Ce message a été modifié par yponomeute - 6 Jan 2017, 18:34.


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
clarusad
posté 6 Jan 2017, 18:59
Message #5


Adepte de Macbidouille
*

Groupe : Membres
Messages : 229
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



Ah, la bonne blague : pas facile à déjouer ces pièges.
Super, ça fonctionne mieux... Mais c'est pas encore ça :-/

Depuis le passage de 10,6 à 10.11, El Capitan refuse de mettre en veille un disque dur externe en FW ; et ça le faisait bien sous Snow Leo, merci Apple... Le disque étant très bruyant, ça devient vite pénible !

Or la commande :
diskutil unmount /dev/disk1s2
démonte bien la partition, mais le disque tourne toujours ! J'ai donc préféré utiliser AppleScript :
osascript -e 'tell application "Finder" to eject disk "DATA"'
Et la, le le bouzin se calme parfaitement :-)
Code
#!/bin/bash
if [[ ! `mount | grep DATA` ]]
then
    diskutil mountDisk /dev/disk1s2
else
    #diskutil unmount /dev/disk1s2
    osascript -e 'tell application "Finder" to eject disk "DATA"'
fi


La question devient donc : quelle est la commande en bash correspondant à l'AppleScript ?
Merci
Go to the top of the page
 
+Quote Post
Jaypee
posté 7 Jan 2017, 13:30
Message #6


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 342
Inscrit : 29 Aug 2002
Membre no 3 340



Consulte le manuel de umount, c'est bien UMOUNT, sans N
man umount

JP
Go to the top of the page
 
+Quote Post
clarusad
posté 8 Jan 2017, 14:48
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 229
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



umount ne fonctionne pas plus !

En revanche, tu m'as mis sur la piste Jaypee : en consultant le man de OS X, j'ai découvert que la solution était encore plus simple !

Code
diskutil eject /dev/disk1s2


Pourquoi faire simple quand on peut compliquer dry.gif
Go to the top of the page
 
+Quote Post
trouspinette
posté 14 Jan 2017, 15:46
Message #8


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 4 836
Inscrit : 19 Feb 2002
Lieu : BZH
Membre no 2 083



Le soucis avec Mac OS X est que le numéro de la partition change :-(

Tu peux faire un peu plus clean en démontant le bon disque, avec la commande suivante (dans le cas d'un volume se nommant "CLONE_FREECOM", monté /Volumes/CLONE_FREECOM, partition disk2s2) :

/usr/sbin/diskutil list | /usr/bin/grep "CLONE" | /usr/bin/grep -o 'disk[0-9]*' | /usr/bin/grep -v grep

La commande renvoie (dans mon cas) :

disk2

Que tu démontes ensuite :

/usr/sbin/diskutil unmountDisk $myDrive2Remove

PS : tu stockes la variables $myDrive2Remove plus haut dans ton script :

export $myDrive2Remove =`/usr/sbin/diskutil list | /usr/bin/grep "CLONE" | /usr/bin/grep -o 'disk[0-9]*' | /usr/bin/grep -v grep`



--------------------
Quis custodiet ipsos custodes ? - Lorsqu'un sujet est résolu, merci d'indiquer [Résolu] dans le titre de votre post !

Luttons contre le style SMS !!!

iPhone X 64 Go iOS 10.3 • MacBook Pro i7 - 10.12 - 16 GB RAM - 1 TB Samsung 840 EVO • MacMini 2010 - 10.9 • @Orange Dégroupé
Linux • pfSense • Une pointe de Windows aussi • Enfocus Switch Expert
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 23rd June 2018 - 17:17