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 .plist
ve 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/LaunchAgents
ve 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/open
ve tam yolu da denedim Terminal.app
, ama boşuna. Önce sudo string eklemeye çalıştım, /usr/bin/sudo
ama 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.
/etc/sudoers
buna 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.