3 votes

Aide sur script Shell

Je suis nouveau dans l'écriture de scripts shell pour Unix et j'ai besoin d'un peu d'aide. Je ne suis pas sûr pourquoi cURL tout à coup, après l'exécution du script, télécharge des packages corrompus qui ne peuvent pas être montés, et pourquoi l'exécution des commandes séparément dans le Terminal fonctionne, mais tout échoue dans le script comme

Pour cURL, il revient en disant commande introuvable Pour la commande mv, il dit fichier ou répertoire introuvable et bien sûr, le montage et tout ce qui suit échouent.

Pourriez-vous jeter un œil au script shell pour voir ce qui manque ou ce que je fais mal?

#!/bin/sh
#Les machines doivent avoir cURL installé comme prérequis pour télécharger des logiciels à partir d'un serveur internet ou FTP

# récupérer des fichiers depuis www.teamviewer.com ou un serveur FTP personnalisé
curl -O http://download.teamviewer.com/download/TeamViewerHost.dmg

# récupérer TeamViewer depuis un serveur FTP personnalisé
curl -O https://www.dropbox.com/s/***********/com.TeamViewer8.Settings.plist

# Attendez le téléchargement
sleep 30s

# Placer le fichier plist personnalisé dans Library/Preferences
mv ~/Téléchargements/com.TeamViewer8.Settings.plist /Library/Preferences/

# Monter et installer TeamViewer
hdiutil mount ~/Téléchargements/TeamViewerHost.dmg
installateur -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target /

# Démonter le package
hdiutil unmount /Volumes/TeamViewerHost/

7voto

shsteimer Points 8749

Pour cURL, il renvoie "commande introuvable"

Vous devez résoudre cela en premier. cURL est installé par défaut avec OS X 10.9 et devrait se trouver dans votre PATH à moins que vous n'ayez modifié votre variable d'environnement PATH. Essayez de l'appeler directement avec :

/usr/bin/curl

dans le script. De plus :

which curl

dans un Terminal vous montrera le chemin complet vers la commande curl dans votre environnement actuel.

En ce qui concerne :

curl -O http://download.teamviewer.com/download/TeamViewerHost.dmg

L'option -O indique à curl de sauvegarder la sortie dans un fichier dans le répertoire de travail actuel. Cela signifie que si vous n'êtes pas dans ~/Downloads lorsque vous exécutez cette commande, le fichier ne sera pas enregistré dans ~/Downloads. Vous devriez ajouter :

cd ~/Downloads

avant d'appeler les commandes curl ou utiliser -o pour enregistrer le fichier dans un emplacement spécifique avec un nom spécifique.

Vous devriez également encapsuler les URL entre guillemets (") - cela empêche les caractères spéciaux du shell dans les URL comme & d'être interprétés par le shell et de causer une URL incorrecte envoyée à curl.

Ceci :

sleep 30s

est complètement inutile. Les appels curl ne renverront pas tant qu'ils n'auront pas complètement téléchargé les fichiers. Remarque : ils renverront s'ils ne parviennent pas à télécharger les fichiers également. Vous voudrez peut-être envisager de vérifier les codes de sortie des appels curl ou pour l'existence des fichiers après l'appel à curl pour vous assurer qu'ils se sont exécutés correctement. Ou envisagez d'ajouter set -e en haut du script pour que le script se termine si une commande renvoie un code de sortie différent de zéro.

Enfin :

Pour la commande mv, il indique "fichier ou répertoire introuvable" et bien sûr le montage et tout ce qui suit échouent.

Votre appel de mv échoue car vos appels curl échouent et ne téléchargent pas les fichiers comme prévu. Corrigez les appels curl et vous corrigerez l'appel mv.

3voto

njboot Points 8005

Cela devrait fonctionner. Je n'ai pas actuellement le temps d'expliquer les modifications/ajouts, mais je mettrai à jour. Vous devez exécuter ce script en tant que sudo pour qu'il fonctionne.

Encore plus facile, sudo chmod +s votrescript - s'exécutera en tant que root sans nécessiter de mot de passe.

#!/bin/bash

#Les machines doivent avoir cURL installé comme prérequis pour télécharger des logiciels depuis internet ou un serveur FTP

#Changer vers votre répertoire de travail.
cd ~/Téléchargements

#Récupérez les fichiers depuis www.teamviewer.com ou un serveur FTP personnalisé
curl -O http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg

#Récupérez TeamViewer depuis un serveur FTP personnalisé
curl -O https://www.dropbox.com/s/******/com.apple.TeamViewer8.Settings.plist

#Placez le fichier plist personnalisé dans Library/Preferences
mv ~/Téléchargements/com.apple.TeamViewer8.Settings.plist /Library/Preferences/

#Monter et installer TeamViewer
hdiutil mount ~/Téléchargements/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Installer\ TeamViewerHost.pkg -target LocalSystem

#Arrêt en douceur du processus afin de démonter le package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Démonter le package
hdiutil unmount /Volumes/TeamViewerHost/

2voto

Steve Points 133

Cela devrait fonctionner :

#!/bin/sh
#Les machines doivent avoir cURL installé comme prérequis pour télécharger des logiciels depuis Internet ou un serveur FTP

# récupérer les fichiers depuis www.teamviewer.com ou un serveur FTP personnalisé
cd ~
curl -O http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg

# récupérer TeamViewer depuis un serveur FTP personnalisé
curl -O https://www.dropbox.com/s/***********/com.TeamViewer8.Settings.plist

# Placer le fichier plist personnalisé dans Library/Preferences
mv ~/com.TeamViewer8.Settings.plist /Library/Preferences/

# Monter et installer TeamViewer
hdiutil mount ~/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target /

# Démonter le package
hdiutil unmount /Volumes/TeamViewerHost/

Votre lien pour télécharger TeamViewerHost a renvoyé

Objet déplacé
Objet déplacé vers ici.

lorsque j'ai lu le fichier, j'ai donc changé le lien.

1voto

fallenidol Points 494

Merci pour toute l'aide les gars. En prenant tout en compte, des suggestions impressionnantes merci à Steve, Ian, orkoden et njboot voici le résultat du script qui fonctionne. J'aimerais savoir comment appliquer la vérification des erreurs qu'Ian avait suggérée, donc j'ai ajouté le set -eux.

#!/bin/sh
#sudo chmod +s "nomduscript" - exécutera en tant que root sans nécessiter de mot de passe
#Les machines doivent avoir cURL installé comme prérequis pour télécharger des logiciels depuis internet ou un serveur FTP

#Arrêter le script si la première commande échoue
set -eux

#Changer pour votre répertoire de travail.
cd ~/Téléchargements

#récupérer la version 8.dmg de TeamViewer ainsi que les fichiers plist depuis un serveur FTP personnalisé ou le site Web de TeamViewer
curl -O "https://www.dropbox.com/s/*************/com.TeamViewer8.Settings.plist" #fichier situé dans le répertoire ~/Library/Preferences/
curl -O "https://www.dropbox.com/s/*************/com.teamviewer.teamviewer.plist" #fichier situé dans le répertoire ~/Library/LaunchAgents/
curl -O "https://www.dropbox.com/s/*************/com.teamviewer.teamviewer_desktop.plist" #fichier situé dans le répertoire ~/Library/LaunchAgents/

#téléchargement de la version 8 en premier pour l'installation avant la version 9
curl -O "http://download.teamviewer.com/download/version_8x/TeamViewerHost.dmg"

#Placer le fichier plist personnalisé dans Library/Preferences et Library/LaunchAgents/
mv ~/Téléchargements/com.TeamViewer8.Settings.plist ~/Library/Preferences/
mv ~/Téléchargements/com.teamviewer.teamviewer.plist ~/Library/LaunchAgents/
mv ~/Téléchargements/com.teamviewer.teamviewer_desktop.plist ~/Library/LaunchAgents/

#Monter et installer TeamViewer version 8
hdiutil mount ~/Téléchargements/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target LocalSystem

#Arrêter les processus en douceur pour démonter le package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Démonter le package
hdiutil unmount /Volumes/TeamViewerHost/

#Mise à niveau vers la version 9
cd ~/Téléchargements
curl -O "http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg"

#Monter et installer TeamViewer version 9
hdiutil mount ~/Téléchargements/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target LocalSystem

#Arrêter les processus en douceur pour démonter le package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Démonter le package
hdiutil unmount /Volumes/TeamViewerHost/

Le but du script est de trouver un moyen de déployer TeamViewer 9 via ssh et terminal en silence sans avoir à installer de logiciel tiers, comme suggéré dans les liens suivants :

http://jdmsysadmin.wordpress.com/2013/09/27/configuring-teamviewer-host-to-be-deployable-via-managed-software-update-munki-on-mac-os-x/

http://jdmsysadmin.wordpress.com/2014/04/16/configuring-teamviewer-host-9-to-be-deployable-with-munki/

0voto

beroe Points 3151

Je commencerais par essayer de mettre des guillemets autour de vos URLs pour curl et les autres commandes. À l'intérieur du script shell, la ponctuation peut poser problème.

Changez également la première ligne en #!/bin/bash au lieu de l'envoyer à sh.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X