3 votos

Shell script help

Soy nuevo en la escritura de shell scripts para Unix y necesito un poco de ayuda. No estoy seguro de por qué cURL ahora de repente después de ejecutar el scriptsscriptscripts está descargando paquetes corruptos que no se pueden montar y por qué la ejecución de los comandos por separado en la Terminal funciona, pero durante el scriptsscriptscripts todo falla como

En el caso de cURL, el resultado es que no se ha encontrado el comando. Para el comando mv dice que no puede encontrar el archivo o directorio y por supuesto el montaje y todo lo demás falla.

¿Podrías echar un vistazo al shell script para ver qué falta o qué estoy haciendo mal?

#!/bin/sh
#Machines must have cURL installed as a prerequisite to download software from internet or FTP server 

# grab files from www.teamviewer.com or custom FTP server
curl -O http://download.teamviewer.com/download/TeamViewerHost.dmg

# grab TeamViewer from custom FTP server
curl -O https://www.dropbox.com/s/***********/com.TeamViewer8.Settings.plist

# Wait for download
sleep 30s

# Place customized plist file into Library/Preferences
mv ~/Downloads/com.TeamViewer8.Settings.plist /Library/Preferences/

# Mount and Install TeamViewer
hdiutil mount ~/Downloads/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target /

# Unmount package
hdiutil unmount /Volumes/TeamViewerHost/

7voto

shsteimer Puntos 8749

En el caso de cURL, el resultado es que no se ha encontrado el comando.

Primero tienes que resolver esto. cURL viene por defecto con OS X 10.9 y debería estar en tu PATH asumiendo que no has hecho el mono con tu PATH variable de entorno. Intente llamarla directamente con:

/usr/bin/curl

en el script en su lugar. También:

which curl

en un Terminal le mostrará la ruta completa del curl en su entorno actual.

En cuanto a:

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

El -O le dice a curl que guarde la salida en un archivo en el directorio de trabajo actual . Eso significa que si no estás en ~/Downloads cuando se ejecuta ese comando, el archivo no se guarda en ~/Downloads . Deberías añadir un:

cd ~/Downloads

antes de llamar a los comandos curl o utilizar -o <filename-with-a-path> para guardar el archivo en una ubicación específica con un nombre concreto.

También debes encerrar las URLs entre comillas ( " ) -- esto detiene los caracteres especiales de la cáscara en las URLs como & sea interpretado por el shell y haga que la URL enviada a curl sea incorrecta.

Esto:

sleep 30s

en completamente innecesario. Las llamadas a curl no regresarán hasta que hayan descargado completamente los archivos. Nota: regresarán si falla para descargar los archivos también. Puede considerar comprobación de los códigos ext de las llamadas curl o por la existencia de los archivos después de llamar a curl para asegurarse de que se ejecutaron correctamente. O considere añadir set -e a la parte superior del script para que el script sale si algún comando devuelve un código de salida distinto de cero .

Finalmente:

Para el comando mv dice que no puede encontrar el archivo o directorio y, por supuesto, el montaje y todo lo demás falla.

Su mv está fallando porque sus llamadas a curl están fallando y no están descargando los archivos como se esperaba. Arregla las llamadas curl y arreglarás el mv llamar.

3voto

Goldorak84 Puntos 116

Esto debería funcionar. No tengo tiempo actualmente para explicar los cambios/adiciones, pero actualizaré. Debes ejecutar este script como sudo para que funcione.

Aún más fácil, sudo chmod +s yourscript - se ejecutará como Root sin requerir contraseña.

#!/bin/bash

#Machines must have cURL installed as a prerequisite to download software from internet or FTP server 

#Change to your working directory. 
cd ~/Downloads

#grab files from www.teamviewer.com or custom FTP server
curl -O http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg

#grab TeamViewer from custom FTP server
curl -O https://www.dropbox.com/s/******/com.apple.TeamViewer8.Settings.plist

#Place customized plist file into Library/Preferences
mv ~/Downloads/com.apple.TeamViewer8.Settings.plist /Library/Preferences/

#Mount and Install TeamViewer
hdiutil mount ~/Downloads/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target LocalSystem

#Softkill process in order to unmount package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Unmount package
hdiutil unmount /Volumes/TeamViewerHost/

2voto

T888 Puntos 1

Esto debería funcionar:

#!/bin/sh
#Machines must have cURL installed as a prerequisite to download software from internet or FTP server 

# grab files from www.teamviewer.com or custom FTP server
cd ~
curl -O http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg

# grab TeamViewer from custom FTP server
curl -O https://www.dropbox.com/s/***********/com.TeamViewer8.Settings.plist

# Place customized plist file into Library/Preferences
mv ~/com.TeamViewer8.Settings.plist /Library/Preferences/

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

# Unmount package
hdiutil unmount /Volumes/TeamViewerHost/

Su enlace para descargar TeamviewerHost regresó

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg">here</a>.</h2>
</body></html>

cuando leí el archivo, así que cambié el enlace.

1voto

fallenidol Puntos 494

Gracias por toda la ayuda, chicos. Teniendo en cuenta todo lo sugerido por Steve, Ian, orkoden y njboot aquí está el resultado del script que funciona. Me gustaría saber cómo aplicar la comprobación de errores que Ian había sugerido por lo que he añadido el set -eux.

#!/bin/sh
#sudo chmod +s "scriptname" - will run as root without requiring password
#Machines must have cURL installed as a prerequisite to download software from internet or FTP server 

#Stop script when first command fails
set -eux

#Change to your working directory. 
cd ~/Downloads

#grab TeamViewer version 8.dmg package and plist files from custom FTP server or TeamViewer website
curl -O "https://www.dropbox.com/s/*************/com.TeamViewer8.Settings.plist" #file located in location ~/Library/Preferences/
curl -O "https://www.dropbox.com/s/*************/com.teamviewer.teamviewer.plist" #file located in location ~/Library/LaunchAgents/
curl -O "https://www.dropbox.com/s/*************/com.teamviewer.teamviewer_desktop.plist" #file located in location ~/Library/LaunchAgents/

#version 8 download first for installation prior to version 9
curl -O "http://download.teamviewer.com/download/version_8x/TeamViewerHost.dmg"

#Place customized plist file into Library/Preferences and Library/LaunchAgents/
mv ~/Downloads/com.TeamViewer8.Settings.plist ~/Library/Preferences/
mv ~/Downloads/com.teamviewer.teamviewer.plist ~/Library/LaunchAgents/
mv ~/Downloads/com.teamviewer.teamviewer_desktop.plist ~/Library/LaunchAgents/

#Mount and Install TeamViewer version 8
hdiutil mount ~/Downloads/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target LocalSystem

#Softkill process in order to unmount package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Unmount package
hdiutil unmount /Volumes/TeamViewerHost/

#version 9 upgrade 
cd ~/Downloads
curl -O "http://downloadus3.teamviewer.com/download/TeamViewerHost.dmg"

#Mount and Install TeamViewer version 9
hdiutil mount ~/Downloads/TeamViewerHost.dmg
installer -pkg /Volumes/TeamViewerHost/Install\ TeamViewerHost.pkg -target LocalSystem

#Softkill process in order to unmount package
ps aux | grep -i TeamViewer | awk {'print $2'} | xargs kill

#Unmount package
hdiutil unmount /Volumes/TeamViewerHost/

El propósito del script es encontrar una forma de desplegar TeamViewer 9 a través de ssh y terminal de forma silenciosa sin tener que instalar software de terceros como se sugiere en los siguientes enlaces:

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 Puntos 1605

Primero trataría de poner las comillas alrededor de sus URLs para curl y los demás comandos. Dentro del shell script, la puntuación puede causar problemas.

Cambie también la primera línea por #!/bin/bash en lugar de enviarlo a sh .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X