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/
bash
script
command-line
pergi pergi
sumber
sumber
set -eux
ke bagian atas skrip Anda. Ini akan membuatnya berhenti ketika perintah pertama gagal.Jawaban:
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.sumber
sleep 30s
. Solusi softkill yang baguscd ~/downloads
? Saya tidak melihat kebutuhan, selain mungkin memperketatnya. Tautan yang ditunjukkan secara otomatis mengunduh ke ~ / Unduhan, tanpacd
diperlukan. Salam.mv
Panggilan 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?Anda harus menyelesaikan ini dulu. CURL mengirimkan default dengan OS X 10.9 dan seharusnya Anda
PATH
anggap Anda belum menggunakanPATH
variabel lingkungan Anda . Coba panggil langsung dengan:sebagai gantinya. Juga:
di Terminal akan menunjukkan jalur lengkap ke
curl
perintah di lingkungan Anda saat ini.Mengenai:
The
-O
pilihan memberitahu curl untuk menyimpan output ke file di direktori kerja saat ini . Itu berarti jika Anda tidak di~/Downloads
saat Anda menjalankan perintah itu, file tidak disimpan ke~/Downloads
. Anda harus menambahkan: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:
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 -e
untuk menambahkan bagian atas skrip sehingga skrip keluar jika ada perintah yang mengembalikan kode keluar non-nol .Akhirnya:
mv
Panggilan Anda gagal karena panggilan curl Anda gagal dan tidak mengunduh file seperti yang diharapkan. Perbaiki panggilan ikal dan Anda akan memperbaikimv
panggilan.sumber
mv
itu akan memperbaiki masalahcurl
ketika itu diperbaiki. Namun pos yang bagus!mv
masih tidak akan membantu jika diacommand not found
mencoba meneleponcurl
dari skripnya.Ini seharusnya bekerja:
Tautan Anda untuk mengunduh TeamviewerHost dikembalikan
ketika saya membaca file, jadi saya mengubah tautannya.
sumber
curl
Panggilan pertama itu akan mengunduh file ke direktori tempat Anda berada ketika skrip dijalankan, bukan~
seperti yang diharapkan olehmv
perintah. Lebih baikcd ~/Downloads
di awal skrip sehingga Anda berada di lokasi yang dikenal.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.
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/
sumber
Pertama saya akan mencoba menempatkan tanda kutip di sekitar URL Anda untuk
curl
dan perintah lainnya. Di dalam skrip shell, tanda baca dapat menyebabkan masalah.Ubah juga baris pertama
#!/bin/bash
alih-alih mengirimnya kesh
.sumber
/bin/sh
adalahbash
cangkang penuh dan tepat . Sudah seperti itu untuk semua OS X yang dirilis setidaknya. Lihat/bin/sh --version
apakah Anda meragukan ini. Tidak perlu mengubah#!
jalur.