2011-07-23 20 views
14

Sudo kullanarak Xcode 4'te bir Çalıştır Komut Dosyası oluşturma aşamasında bir komut dosyasının içinde bir komutu çalıştırmak için kullanmam gerekir.Xcode 4'te bir Run Script oluşturma aşamasının içinde sudo nasıl kullanılır?

sudo: Ancak, derleyici şikayet hiçbir tty mevcut ve hiçbir askpass programı

Herkes bu sorun için akıllı bir çözüm var belirtilmiş? Kurulum ortam değişkeni SUDO_ASKPASS = şifre,

Sonra

#!/bin/bash 
echo thesudopassword 

Bu kabuk komut dosyası olarak adlandırabileceğimiz password.sh:

+0

Sudo erişiminin ne yaptığınızı bildirmenizi öneririm. Bu daha geniş alternatifler açabilir. –

+0

Bir dosyayı bir konumdan diğerine kopyalayın ve kök erişimi ile yapılması gerekir. – ericg

+0

Aynı sorunu yaşıyorum ve bu komut için ALL = NOPASSWD ayarladık. Aslında bunu konsoldan yürütürsem, – hithwen

cevap

11

Bir çözüm aşağıdaki gibi yürütülebilir bir kabuk komut sudo şifresini yerleştirmektir Bu ayarlandıktan sonra -A seçeneği sudo'ya iletilebilir. Bu seçenek sudo parolasını almak için ASKPASS programını kullanır. ASKPASS programının sadece şifreyi stdout'a yazması gerekiyor.

Yani, örneğin,

sudo -A ditto -V /tmp/testserver.dst/

Bu açıkça oldukça güvensiz bir çözümdür, ama çalışır. beri, olur Bu, düşünebildiğim en kolay çözümdür

sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode /path/to/your/project.xcodeproj 

ama bazı dezavantajları olabilir:

+10

şifresini istemez, en azından sizin tarafınızdan okunabilir hale getirir! chmod 600 ' –

-1

Ayrıca böyle sudoyu kullanarak bunu Terminali'ne parametre olarak projeyi vererek XCode yürütebilirsiniz XCode'u root olarak çalıştır.

+2

Ugh. Teknik olarak bu işe yarıyor, ancak özellikle Xcode 4'ün ne kadar düştüğünü düşünürsek, buna karşı bir tavırla tavsiye ederim (ne sıklıkla düştüğüne bağlı olarak ... kök ayrıcalıklarına neden olabilecekleri tahmin edebilirsiniz). – Richard

+1

Bu vidalar, gelecekte Xcode'u root olarak çalıştırmanız gerektiğinden projede yapılacak herhangi bir değişiklikten dolayı. – mydogisbox

-4

Sudo parolanızı her yere yazmanıza gerek yok. Sadece bir terminal penceresi açın ve şifrenizi girdikten sonra

$ sudo echo "hello" 

yazın, bir süre için iyi olacaktır - Xcode tarafından kökenli kabuk bu izni devralır ve - ne kadar emin değildi.

daha sonra tekrar "hayır tty mevcut" mesajı alırsanız, sadece bu sorunun başka çözüm Sudoers dosyasını değiştirebilir ve sorulacaktır asla bunun ve devlete hesabınızı eklemektir prosedürü

+2

İşler, ancak otomatik bir ortamda yararlı değildir. – Jasarien

2

tekrarlamak sudo şifresi. Bu oldukça basittir başarmak için:

çalışma:

Kullanıcı ayrıcalık şartname bölümünde
sudo visudo 

Tabii

youraccountname ALL=(ALL) NOPASSWD: ALL 

benzeyen bir satır ekleyin, bunu yapmak için tehlikeli bir şey olabilir , yani dikkatli ol. Bu rotaya gitmeden önce sudoers ve visudo için man sayfasını okumanızı tavsiye ederim. Şu anda kabul edilen yanıt daha güvenli/muhtemelen daha iyi, her ikisi de henüz öne sürülmemiştir

+1

'youraccountname ALL = (ALL) NOPASSWD: SETENV:/path/to/script' komutunu kullanmak daha iyi olurdu, bu da söz konusu yol için parola ödeneğini kısıtlar ve daha sonra' sudo -E/the/script' komutunu kullanır. Çevreyi aktarmak için Xcode var (ör. '$ BUILT_PRODUCTS_DIR', vb.) – jrodatus

6

İki fikir,:

İlk seçenek root olarak çalıştırılması gerekiyor senaryonun parçası koymak olurdu komut dosyasında.sh veya bir şey) ve sonra root olarak ayarlanmasını sağlayın: chmod go-w,+sx scriptfile, sudo chown root scriptfile. Bu, komut dosyasının otomatik olarak root olarak çalışacağı anlamına gelir, bu da onu çalıştırmak için kimlik doğrulaması yapmanıza gerek kalmaz (sadece değiştirmek için). Operasyonu kullanıcı girdisine tabi olmadığı sürece, bu oldukça güvenli olmalıdır. (Tabii ki, değil güvenli olacağını bir giriş argüman alır ve onu siler veya ishal, ya da onunla başka bir çok şey yapan bir senaryo, yaparsanız.)

İkinci seçenek AppleScript'i olacaktır (muhtemelen osascript ile). Applescript size bir şifre soran bir grafik iletişim kutusu açılır do shell script "sudo command goes here" with administrator privileges sağlar.

Bu seçeneklerden ilki, (örneğin) bir SCM'ye teslim edilmek veya başka bir kullanıcıya gönderilmekle iyi anlaşılmasa da, otomatik bir ortam için iyi olur. İkinci seçenek bununla daha iyi çalışır, ancak her seferinde bir şifre girişi gerektirir, bu nedenle otomatik bir oluşturma komut dosyası için de işe yaramaz.

+1

UID'yi root olarak ayarlamak iyi bir fikirdir. Elmalı cevaptan hoşlandığımdan emin değilim. İstediğim en son şey hakkında, inşa etmem gereken her zaman bir şifre sormak. – ericg

+0

@ericgorr Doğru olsa bile, genellikle değirmen fabrikanızın yapıları için root'unuza ihtiyacınız olmayacağını umabilir (çoğu testin ev dizininizde yapılması gerektiğinden), ancak bir süre için Sistem konumlarına veya benzerlerine yüklendiğinde, işlerin çalıştığı bir test. Tabii ki burada ne yaptığının hiçbir fikrim yok. – arcticmac

+0

Aslında, her yapı için root'a ihtiyacım var ... – ericg

İlgili konular