Ayuda de script de shell

3

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

Para cURL vuelve diciendo que no se encontró el comando Para el comando mv dice que no se puede encontrar el archivo o directorio Y, por supuesto, el montaje y todo lo demás fallan.

¿Podrías echar un vistazo al script de shell para ver qué falta o si lo 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/
    
pregunta gogo 21.08.2014 - 01:39

5 respuestas

3

Esto debería funcionar. Actualmente no tengo tiempo para explicar los cambios / adiciones, pero lo actualizaré. Debe ejecutar este script como sudo para que funcione.

Aún más fácil, sudo chmod +s yourscript - se ejecutará como root sin necesidad de 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/
    
respondido por el njboot 21.08.2014 - 02:59
7
  

para cURL vuelve diciendo que no se encontró el comando

Necesitas resolver esto primero. cURL se entrega de forma predeterminada con OS X 10.9 y debería estar en su PATH , suponiendo que no haya simulado con su variable de entorno PATH . Intenta llamarlo directamente con:

/usr/bin/curl

en el script en su lugar. También:

which curl

en una Terminal le mostrará la ruta completa al comando curl en su entorno actual.

En cuanto a:

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

La opción -O le dice a curl que guarde la salida en un archivo en el directorio de trabajo actual . Eso significa que si no está en ~/Downloads cuando ejecuta ese comando, el archivo no se guarda en ~/Downloads . Debes añadir un:

cd ~/Downloads

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

También debes ajustar las URL entre comillas ( " ): esto evita que los caracteres especiales de la shell en las URL como & sean interpretados por la shell y causen que la URL enviada a curl sea incorrecta.

Esto:

sleep 30s

en completamente innecesario. Las llamadas de enrollamiento no volverán hasta que hayan descargado completamente los archivos. Nota: volverán si fallan para descargar los archivos también. Es posible que desee considerar verificar los códigos externos de las llamadas de enrollamiento o por la existencia de los archivos después de llamar a curl para asegurarse de que se ejecutaron correctamente. O considere agregar set -e a la parte superior de la secuencia de comandos para que la secuencia de comandos salga si algún comando devuelve un código de salida distinto de cero .

Finalmente:

  

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

Su llamada mv está fallando porque sus llamadas de rizo están fallando y no están descargando los archivos como se esperaba. Corrija las llamadas de curl y usted arreglará la llamada mv .

    
respondido por el Ian C. 21.08.2014 - 01:51
2

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/

Tu enlace para descargar TeamviewerHost devuelto

<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.

    
respondido por el Steve 21.08.2014 - 01:45
1

Gracias por todos los chicos de ayuda. Tomar todo en cuenta a partir de las increíbles sugerencias gracias a Steve, Ian, orkoden y njboot aquí es el resultado del script que funciona. Ojalá supiera cómo aplicar la comprobación de errores que Ian había sugerido, así que agregué el conjunto -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 de la secuencia de comandos es encontrar una manera de implementar TeamViewer 9 a través de ssh y el terminal de forma silenciosa sin tener que instalar software de terceros como se sugiere en los siguientes enlaces:

enlace

enlace

    
respondido por el gogo 22.08.2014 - 23:17
0

Primero intentaría poner comillas alrededor de tus URL para curl y los otros comandos. Dentro del script de shell, la puntuación puede causar problemas.

También cambia la primera línea a #!/bin/bash en lugar de enviarla a sh .

    
respondido por el beroe 21.08.2014 - 01:43

Lea otras preguntas en las etiquetas