2013-03-15 16 views
5

Bir dizi kullanıcı girdisi üzerinden geçen bir komut dosyası (parolaları maskeleme için) içerir ve girdiye göre bazı çıktılar üretir. Bir metin dosyasından girdiyi besleyen ve sonra çıktıyı daha sonra kullanmak üzere yakalayan başka bir betik yazmak istiyorum. Bunun herhangi bir örneği var mı?Bir metin dosyasından etkileşimli bir bash komut dosyasına giriş beslemesi nasıl yapılır

GÜNCELLEME: Bazı kazma işlemlerini yaptım ve kabuk komut dosyası, kullanıcı girdisini isteyen bir java sürecini başlatıyor. xargs ve <,>, | Bunun için işe yaramıyor. Bir kabuk işlevi hakkında

function script_plus() 
{ 
    if [ $# != 2 ]; then echo "usage: ..."; exit; fi 
    src=$1; 
    tgt=$2; 
    if [ ! -f $src ]; then echo "usage: ..."; exit; fi 
    cat $src | xargs script > $tgt 
} 

'Senaryo' Devraldı nasıl

+2

Cevap için yeterli içerik yok, ancak ['expect'] 'e göz atın (http://expect.sourceforge.net/). –

+3

Normal G/Ç yönlendirmeyi denediniz mi? Komut dosyasının girişini nasıl okuduğuna bağlı olarak, bazen işe yarayacaktır. –

cevap

-1

sizin satıcı yazısıdır. Hata kontrolü yapmıyor (sadece resim için). Bir kabuk işlevi değilse, yukarıdaki script_plus'un gövdesi bir kabuk komut dosyası dosyasının içeriği olabilir.

+1

Bazı kod sorunlarınız var - örneğin, "src" ye ihtiyacınız var "$ src" '- ama daha temelde, script_plus FOO BAR'ın komut dosyasından üstün olduğunu sanmıyorum < FOO > BAR 've bunun önerilmeye değer bir yaklaşım olduğunu düşünmüyorum. – ruakh

+0

Teşekkürler, xargs ile sabitlendi. Tabii ki hata/arg kontrolü ile komut dosyasını büyütmek gerektiğinde 'tavsiye edilmeye değer' değişiklikler. Giriş var, örneğin. – GoZoner

+0

'xargs', OP'nin ihtiyacı olan şey değildir. Mevcut betik bu şeyleri komut satırı parametreleri olarak almaz; daha doğrusu, "bir dizi kullanıcı girdisinden geçiyor". – ruakh

5

myscript <input_file> output_file (komut satırından), kullanıcı girdisi gibi satır satır input_file okuyacaktır ve sonra çıktıyı output_file olarak yazacaktır. Dikkatli olun, eğer output_file zaten mevcutsa, herhangi bir uyarı olmadan tamamen üzerine yazılacaktır.

+0

'<', '>' ve '|' bilmek için iyi araçlardır. 'script1 | script2' 'script1' çıktısını alır ve girdi olarak' script2' içine besler. – Lorkenpeist

+0

'>>' başka bir yararlı araçtır. “myscript >> output_file”, çıktıyı “myscript” ten çıktı_dosyası sonuna ekler. Yanıt için – Lorkenpeist

+0

teşekkürler. Yukarıdaki Güncellemeler'e bakın. Aslında bir kabuk senaryosu tarafından başlatılan bir java süreci. Şimdiye kadar bu önerilerde hayır şansı. – etsauer

1

Çoğu linux dağıtımları için paket olarak kullanılabilen expect programını deneyebilirsiniz. Etkileşimli programları beslemek için basit bir betik dili kullanır. Bir örnek komut dosyası aşağıdaki gibi olabilir: Bu komut dosyası daha sonra hızlı Enter password for testuser: bekleyin ve benzeri verysecret123 ile cevap programı passwordmanager başlatmak için expect söylerdim

#!/usr/bin/expect 
spawn passwordmanager 
expect "Enter password for testuser:" 
send "verysecret123" 

.

İlgili konular