OS X bash betiğini bir terminal penceresinde başlatılan şekilde açmak gerekiyor


0

Tamam çalışan, uzun ve karmaşık bir bash betiğim var, ancak dağıtım işlemimi otomatikleştirmeye çalışıyorum ve bu noktada boşuna gidiyorum.

Senaryoyu LaunchAgent olarak problemsiz olarak çalıştırabilirim, fakat elbette açılışta arka planda olur. Bu yüzden senaryoyu kesmem gerekirse herhangi bir düğmeye basabileceğim senaryo başında bir duraklama var.

Buradaki sorun, bir Terminal penceresinde açılacak olan betiğe ihtiyacım olması, iptal etmek veya devam etmek için düğmeye basabilmem. Sorunumun başladığı yer burası.

Komut dosyasında birçok sudo komutu var. Aşağıdakini yarattım .plistve elle yükleyebilirim. Çalışır ve betiği yükler ve her şey çalışır. Ancak, önyüklemede hiçbir şey yapmaz ve yalnızca Konsol'daki hata kodu 1 ile çıkar.

Onu /Library/LaunchAgentsve içine koymayı denedim /Library/LaunchDaemons. Temelde terminal penceresini root olarak açması gerekir, böylece betiğin içindeki tüm komutlar şifreyi manuel olarak girmeme gerek kalmadan root olarak çalışacaktır.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.deecies.first</string>
<key>ProcessType</key>
<string>Interactive</string>
<key>ProgramArguments</key>
<array>
    <string>open</string>
    <string>-a</string>
    <string>terminal</string>
    <string>/Users/admin/first-boot.command</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

Belirtmeyi /usr/bin/openve tam yolu da denedim Terminal.app, ama boşuna. Önce sudo string eklemeye çalıştım, /usr/bin/sudoama hiçbiri de.

Yerleştirildiğinde açılmasını sağlayan bir Terminal penceresi açmayı başardım /Library/LaunchAgents, ancak komut dosyasındaki tüm komutlar için "izin verilmez" aldığım için Terminal'i veya komut dosyasını kök olarak açmıyor gibi görünüyor Bu sudo gerektirir.


Open komutu root işlevi görmüyor gibi görünüyor - muhtemelen GUI terminalini açabilirim, ama elbette ki amacım bu değil. Muhtemelen senaryoyu terminal penceresi olmadan çalıştırmayı başarabilirdim - ikisini birleştirmek neredeyse imkansız görünüyor. Belki bsexc bir yerlerde kullanılabilir, ama tam olarak nasıl emin değilim.
realdannys

Komut dosyasının önyükleme sırasında çalışması gerekiyor mu (hiç kimse giriş yapmamış olsa bile) veya kullanıcı hesabınıza giriş yaptığınızda komut dosyasının çalıştırılması gerekiyor mu? Hiç kimse giriş yapmamış olsa bile önyükleme sırasında çalışmasını istiyorsanız, etkileşimli bir terminal kullanamazsınız, çünkü GUI uygulamaları yalnızca bir kullanıcı GUI'ye giriş yaptığında çalışabilir. Ayrıca, parola girmek zorunda kalmadan sudo yapmak istemeniz için, /etc/sudoersbuna izin vermek için dosyanızı zaten düzenlediniz mi? Çünkü varsayılan olarak, sudo oturum açtıktan sonra ilk kez bir şifre gerektiriyor; daha sonra şifreyi tekrar girmeniz gerekmeyen bir zaman aşımı süresi vardır.
Spiff

Hey Spiff, temelde elden kaçmasını istiyorum - ve dağıtım yöneticimin giriş yaptıktan sonra olması gerekiyor, bana sadece herhangi bir düğmeye basabileceğim terminalin GUI'sini vermem gerekecek (ve başka bir GUI uygulaması var. ile) aldığım sorun Terminal'i açıyordu ve komutu root olarak çalıştırıyordu (bana root olarak açmaya çalışan GUI sorunları veriyordu)
realdannys

Yanıtlar:


1

Bunun yerine open Terminal, uygulama ikili dosyasını doğrudan (.app dosyasını değil) çağırabilirsiniz. Başlamanız için aşağıdakiler çalışmalıdır. Terminal'in başlayacağını, betiği çalıştıracağını ve çıkacağını unutmayın. Terminal.app tercihlerinize bağlı olarak, terminal penceresi hemen kaybolabilir veya komut dosyasının çıktısıyla ekranda ölü bir pencere bırakabilir.

<array>
<string>/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal</string>
<string>/Users/admin/first-boot.command</string>
</array>

Selam Kent, teşekkürler bunu basitçe denemedim. KullanıcıAdı anahtarında yönetici oluşturmam gerektiğini mi düşünüyorsunuz yoksa bu root olarak açılacak mı? Çalıştığı betiğin içinde bir dizi sudo komutu vardır, bu yüzden fikir kök çalıştırıyor, böylece şifreyi girmek için manuel kullanıcı müdahalesi olmaz - bu yöntemin her ikisinin de terminal gui'ye basmama izin vereceğini düşünüyor musunuz? Durdurmak (gerekirse) ve tüm sudo komutlarını çalıştırmak için herhangi bir tuşa?
realdannys

Başlatma komut dosyasında denemedim; ancak, su'd root kullanıcısı olarak çalıştırıldığında, komut dock'taki ikinci Terminal.app örneğini ve standart varsayılan renkler ve terminal boyutu vb. bu yüzden kök tercihlerini kullandığını biliyorum. Başlatma sırasında düşünebileceğim tek şey, pencere sunucusu hazır olmadan önce Terminal'i başlatmaya çalışabileceğidir.
Kent

LaunchDaemon olarak denedim ve tek yaptığı komut dosyasını normalde olduğu gibi arka planda çalıştırmaktı - terminal penceresi ve etkileşim yolu yok. Sanırım bir LaunchAgent olarak deneyebilirim, her şeyin mutlu bir şekilde sudo gibi çalışacağından emin değilim.
realdannys

Korktuğum şey buydu ... FWIW, senaryoda sudo bir sorun olmamalı, çünkü bu işlemler AFAIK kök olarak çalışıyor. (/ Library / LaunchDaemons ve / Library / LaunchAgents dizinlerindeki izinler oldukça katıdır). Bu arada başka bir şey düşünmeye çalışacağım.
Kent

Eh LaunchAgent olarak denedim ve bazı korkak izin hataları vardı ama nihayetinde aynı şeyi yaptı, arka planda bir terminal penceresi olmadan koştu. .Com komut dosyasını sudoers dosyasına ekledim ama bu hiçbir şey yapmıyor - Bu komut dosyasını normal olarak admin olarak yürütürsem sudo üzerinde başarısız olur, izinsiz bir şey gerekli, Sudo'yu komut dosyasına geri koyarsam durur ve parola. Elbette eğer senaryoyu sudo olarak çalıştırırsam, Launchd'un (GUI hariç) olduğu gibi sudo satırları olmadan gereken her şeyi yapar, böylece sudoers hiçbir şey yapmaz
realdannys
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.