Ayuda de script de Shell

Soy nuevo en la escritura de scripts de shell para Unix y necesito un poco de ayuda. No estoy seguro de por qué ahora, de repente, después de ejecutar el script, la descarga corrompe los packages que no se pueden montar y por qué ejecutar los commands por separado en el trabajo del Terminal, pero durante el script todo falla, como

Para cURL vuelve diciendo que el command no se encuentra Para el command mv dice que no se puede encontrar el file o directory y por supuesto el assembly y todo lo demás falla.

  • Convierta un file en un panel de Papelería a través de la línea de command
  • Hizo `man ls> temp.txt`. El file de text de salida está dañado
  • Eliminar el usuario de Mac OS
  • ¿Qué editores de text de command-line vienen incluidos con macOS?
  • Conmutar services de iCloud en Preferences del sistema a través de la línea de command / Bash
  • ¿Cómo recibo bash con el soporte de readline de Nix?
  • ¿Podría echar un vistazo al script de shell para ver lo que falta o estoy haciendo algo 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/ 

  • command no encontrado para script de shell
  • ¿Es posible tener espacios de escape bash en pwd?
  • no se puede encontrar el command curl, las utilidades OSX han sido reemplazadas por coreutils de GNU ... ¿cómo comenzar desde cero?
  • ¿Por qué OS X tiene bash v3.2.57?
  • Bash de recuperación de files?
  • ¿Cómo puedo salir de "bash"?
  • 5 Solutions collect form web for “Ayuda de script de Shell”

    Esto debería funcionar. Actualmente no tengo time 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 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/ 

    Para cURL vuelve diciendo command no encontrado

    Tienes que resolver esto primero. cURL envía por defecto con OS X 10.9 y debe estar en tu PATH suponiendo que no has simulado con tu PATH entorno PATH . Intenta llamarlo directamente con:

     /usr/bin/curl 

    en el guión en su lugar. También:

     which curl 

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

    Respecto a:

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

    La opción -O le dice a curl que guarde la salida en un file en el directory de trabajo actual . Eso significa que si no está en ~/Downloads cuando ejecuta ese command, el file no se guarda en ~/Downloads . Debe agregar un:

     cd ~/Downloads 

    línea antes de llamar a los commands de curl o use -o <filename-with-a-path> para save el file en una location específica con un nombre específico.

    También debe ajustar las URL entre comillas ( " ): esto impide que los caracteres especiales del shell en las URL como & sean interpretados por el shell y que la URL que se envía al curl sea incorrecta.

    Esta:

     sleep 30s 

    en completamente innecesario. Las llamadas curl no volverán hasta que hayan descargado completamente los files. Nota: volverán si no pueden download los files también. Es posible que desee considerar verificar los códigos de extensión de las llamadas curl o la existencia de los files después de llamar al curl para asegurarse de que se ejecutaron correctamente. O considere agregar set -e a la parte superior del script para que el script salga si algún command devuelve un código de salida distinto de cero .

    Finalmente:

    Para el command mv dice que no se puede encontrar el file o directory y por supuesto el assembly y todo lo demás falla.

    Tu llamada mv falla porque tus llamadas curl están fallando y no estás descargando los files como se esperaba. Corrige las llamadas curl y arreglarás la llamada mv .

    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 download 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 file, entonces cambié el enlace.

    Gracias por toda la ayuda chicos. Tomando todo en count de las impresionantes 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 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 de la secuencia de commands es encontrar una forma de desplegar TeamViewer 9 a través de ssh y la terminal en 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/

    Primero trataría de poner comillas alnetworkingedor de sus URL para curl y los otros commands. Dentro del script de shell, la puntuación puede causar problemas.

    También cambie la primera línea a #!/bin/bash lugar de enviarlo a sh .

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).