Guida allo script della shell

3

Sono nuovo nello scrivere script di shell per Unix e ho bisogno di un piccolo aiuto. Non sono sicuro del motivo per cui cURL ora all'improvviso dopo aver eseguito lo script sta scaricando pacchetti corrotti che non possono essere montati e perché l'esecuzione dei comandi separatamente nel terminale funziona, ma durante lo script tutto fallisce come

Per cURL torna indietro dicendo comando non trovato Per il comando mv dice che non riesce a trovare il file o la directory e, naturalmente, il montaggio e tutto da allora in poi fallire.

Potresti dare un'occhiata allo script della shell per vedere cosa manca o sto sbagliando?

#!/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/
    
posta gogo 21.08.2014 - 01:39
fonte

5 risposte

3

Questo dovrebbe funzionare. Al momento non ho tempo per spiegare le modifiche / aggiunte, ma aggiornerò. È necessario eseguire questo script come sudo perché funzioni.

Ancora più semplice, sudo chmod +s yourscript - verrà eseguito come root senza richiedere password.

#!/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/
    
risposta data 21.08.2014 - 02:59
fonte
7

For cURL it comes back saying command not found

Devi risolvere questo prima. cURL ha un valore predefinito con OS X 10.9 e dovrebbe essere nella tua PATH assumendo che tu non abbia scimmia con la tua variabile di ambiente PATH . Prova a chiamarlo direttamente con:

/usr/bin/curl

invece nello script. Inoltre:

which curl

in un terminale ti mostrerà il percorso completo del comando curl nel tuo ambiente corrente.

Per quanto riguarda:

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

L'opzione -O dice a curl di salvare l'output in un file nella directory di lavoro corrente . Ciò significa che se non si è in ~/Downloads quando si esegue quel comando, il file non viene salvato in ~/Downloads . Devi aggiungere un:

cd ~/Downloads

riga prima di chiamare i comandi di curl o utilizzare -o <filename-with-a-path> per salvare il file in una posizione specifica con un nome specifico.

Dovresti anche racchiudere gli URL tra virgolette ( " ) - questo interrompe la shell di caratteri speciali negli URL come & dall'interpretazione della shell e fa in modo che l'URL inviato al ricciolo non sia corretto.

Questa:

sleep 30s

in completamente inutile. Le chiamate al ricciolo non torneranno finché non avranno scaricato completamente i file. Nota: torneranno se falliscono per scaricare anche i file. Puoi prendere in considerazione controllare i codici ext delle chiamate a ricciolo o per l'esistenza dei file dopo aver chiamato curl per assicurarsi che funzionino correttamente. Oppure considera l'aggiunta di set -e all'inizio dello script in modo che lo script venga chiuso se qualsiasi comando restituisce un codice di uscita diverso da zero .

Infine:

For the mv command it says cannot find file or directory and of course mounting and everything thereafter fail.

La tua chiamata mv non funziona perché le tue chiamate di arricciatura non stanno riuscendo e non stanno scaricando i file come previsto. Risolvi le chiamate di arricciatura e correggi la chiamata di mv .

    
risposta data 21.08.2014 - 01:51
fonte
2

Questo dovrebbe funzionare:

#!/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/

Il tuo link per scaricare TeamviewerHost restituito

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

quando ho letto il file, quindi ho cambiato il link.

    
risposta data 21.08.2014 - 01:45
fonte
1

Grazie per tutto l'aiuto ragazzi. Prendendo tutto in considerazione dai fantastici suggerimenti grazie a Steve, Ian, orkoden e njboot ecco il risultato della sceneggiatura che funziona. Vorrei sapere come applicare il controllo degli errori suggerito da Ian, quindi ho aggiunto il 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/

Lo scopo dello script è trovare un modo per distribuire TeamViewer 9 tramite ssh e terminale in silenzio senza dover installare software di terze parti come suggerito nei seguenti link:

link

link

    
risposta data 22.08.2014 - 23:17
fonte
0

Per prima cosa proverei a mettere le virgolette sui tuoi URL per curl e gli altri comandi. All'interno dello script della shell, la punteggiatura può causare problemi.

Cambia anche la prima riga in #!/bin/bash invece di inviarla a sh .

    
risposta data 21.08.2014 - 01:43
fonte

Leggi altre domande sui tag