Bantuan skrip shell

3

Saya baru menulis skrip shell untuk Unix dan butuh sedikit bantuan. Saya tidak yakin mengapa cURL sekarang tiba-tiba setelah menjalankan skrip mengunduh paket-paket korup yang tidak dapat di-mount dan mengapa menjalankan perintah secara terpisah di Terminal berfungsi, tetapi selama skrip semuanya gagal seperti

Untuk cURL ia kembali mengatakan perintah tidak ditemukan Untuk perintah mv dikatakan tidak dapat menemukan file atau direktori dan tentu saja pemasangan dan semuanya sesudahnya gagal.

Bisakah Anda melihat skrip shell untuk melihat apa yang hilang atau saya melakukan kesalahan?

#!/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/
pergi pergi
sumber
Tambahkan a set -euxke bagian atas skrip Anda. Ini akan membuatnya berhenti ketika perintah pertama gagal.
orkoden
2
Itu bukan server FTP jika URL dimulai dengan http / https.
bfontaine

Jawaban:

3

Ini seharusnya bekerja. Saat ini saya tidak punya waktu untuk menjelaskan perubahan / penambahan, tetapi saya akan memperbarui. Anda harus menjalankan skrip ini sebagai sudo agar bisa berfungsi.

Lebih mudah lagi, sudo chmod +s yourscript- akan berjalan sebagai root tanpa memerlukan kata sandi.

#!/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/
njboot
sumber
Satu-satunya adalah, Anda perlu cd sebagai ~ / Downloads dan juga Anda hanya bisa menyingkirkan sleep 30s. Solusi softkill yang bagus
Steve
Terima kasih atas masukannya. Mengapa cd ~/downloads? Saya tidak melihat kebutuhan, selain mungkin memperketatnya. Tautan yang ditunjukkan secara otomatis mengunduh ke ~ / Unduhan, tanpa cddiperlukan. Salam.
njboot
Yah, mereka / tidak / unduh secara otomatis ke folder itu. Mereka secara otomatis mengunduh ke ~, setidaknya di macbook saya.
Steve
1
Ini tidak bekerja dengan baik di semua kecuali kasus tersempit. File-file tersebut diunduh ke direktori kerja saat ini. mvPanggilan Anda menganggap lokasi unduhan tetap. Sudo seharusnya tidak perlu. Perintah yang membutuhkan privs yang ditinggikan akan meminta mereka jika diminta di sini. Juga: Anda tidak memiliki pengecekan kesalahan. Bagaimana jika panggilan curl gagal?
Ian C.
@IanC. Terima kasih atas masukannya. Saya telah dimodifikasi berdasarkan saran Steve juga. Segera menghapus sudo dari skrip ... dengan cepat menyadari bahwa itu bodoh. Menambahkan ekspresi kondisional dalam kasus kegagalan panggilan keriting akan membuat banyak akal ... terlalu lelah sekarang. Besok! Terima kasih atas tanggapan Anda. Tepuk tangan.
njboot
7

Untuk cURL ia kembali mengatakan perintah tidak ditemukan

Anda harus menyelesaikan ini dulu. CURL mengirimkan default dengan OS X 10.9 dan seharusnya Anda PATHanggap Anda belum menggunakan PATHvariabel lingkungan Anda . Coba panggil langsung dengan:

/usr/bin/curl

sebagai gantinya. Juga:

which curl

di Terminal akan menunjukkan jalur lengkap ke curlperintah di lingkungan Anda saat ini.

Mengenai:

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

The -Opilihan memberitahu curl untuk menyimpan output ke file di direktori kerja saat ini . Itu berarti jika Anda tidak di ~/Downloadssaat Anda menjalankan perintah itu, file tidak disimpan ke ~/Downloads. Anda harus menambahkan:

cd ~/Downloads

baris sebelum memanggil perintah curl atau gunakan -o <filename-with-a-path>untuk menyimpan file ke lokasi tertentu dengan nama tertentu.

Anda juga harus membungkus URL dengan tanda kutip ( ") - ini menghentikan karakter khusus shell di URL seperti &ditafsirkan oleh shell dan menyebabkan URL yang dikirim ke curl salah.

Ini:

sleep 30s

sama sekali tidak perlu. Panggilan ikal tidak akan kembali sampai mereka benar-benar mengunduh file. Catatan: mereka akan kembali jika mereka gagal mengunduh file juga. Anda mungkin ingin mempertimbangkan untuk memeriksa kode ext panggilan curl atau untuk keberadaan file setelah memanggil curl untuk memastikan mereka berjalan dengan benar. Atau pertimbangkan set -euntuk menambahkan bagian atas skrip sehingga skrip keluar jika ada perintah yang mengembalikan kode keluar non-nol .

Akhirnya:

Untuk perintah mv dikatakan tidak dapat menemukan file atau direktori dan tentu saja pemasangan dan semuanya gagal.

mvPanggilan Anda gagal karena panggilan curl Anda gagal dan tidak mengunduh file seperti yang diharapkan. Perbaiki panggilan ikal dan Anda akan memperbaiki mvpanggilan.

Ian C.
sumber
Dia punya masalah dengan mvitu akan memperbaiki masalah curlketika itu diperbaiki. Namun pos yang bagus!
Steve
@Steve saya mengutip postingnya dalam jawaban saya. Dia berkata "Untuk cURL itu kembali mengatakan perintah tidak ditemukan".
Ian C.
Memperbaiki komentar saya, maaf saya salah kata
Steve
Memperbaiki mvmasih tidak akan membantu jika dia command not foundmencoba menelepon curldari skripnya.
Ian C.
2

Ini seharusnya bekerja:

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

Tautan Anda untuk mengunduh TeamviewerHost dikembalikan

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

ketika saya membaca file, jadi saya mengubah tautannya.

Steve
sumber
curlPanggilan pertama itu akan mengunduh file ke direktori tempat Anda berada ketika skrip dijalankan, bukan ~seperti yang diharapkan oleh mvperintah. Lebih baik cd ~/Downloadsdi awal skrip sehingga Anda berada di lokasi yang dikenal.
Ian C.
Juga: tidak ada pengecekan error.
Ian C.
1

Terima kasih atas semua bantuan kalian. Mempertimbangkan semuanya dari saran yang luar biasa terima kasih kepada Steve, Ian, orkoden dan njboot di sini adalah hasil dari skrip yang berfungsi. Saya berharap saya tahu bagaimana menerapkan pengecekan error yang disarankan Ian sehingga saya menambahkan 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/

Tujuan skrip adalah untuk menemukan cara untuk menyebarkan TeamViewer 9 melalui ssh dan terminal secara diam-diam tanpa harus menginstal perangkat lunak pihak ke-3 seperti yang disarankan dalam tautan berikut:

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/

pergi pergi
sumber
0

Pertama saya akan mencoba menempatkan tanda kutip di sekitar URL Anda untuk curldan perintah lainnya. Di dalam skrip shell, tanda baca dapat menyebabkan masalah.

Ubah juga baris pertama #!/bin/bashalih-alih mengirimnya ke sh.

beroe
sumber
/bin/shadalah bashcangkang penuh dan tepat . Sudah seperti itu untuk semua OS X yang dirilis setidaknya. Lihat /bin/sh --versionapakah Anda meragukan ini. Tidak perlu mengubah #!jalur.
Ian C.