Normalde otomatik bir işlem (örneğin cron, Jenkins) olarak çalıştırılan bir komut dosyasının davranışını araştırıyorum. Komut dosyası (sonunda) etkileşimli olarak çalıştırıldığında farklı davranan (kullanıcı girdisi arayan) komutları çağırabilir; Örneğin, patchtersine çevrilmiş bir yama ile ne svnyapacağını soracak ve şifreleri isteyecek, ancak etkileşimli olmayan bir şekilde çalıştırıldıklarında ne olacağını görmem gerekiyor.
patchEtkileşimli olmadığını ikna etmek oldukça kolaydır; Sadece stdoutbir tty olmayan yönlendirmek gerekir :
$ </dev/null > >(cat) /path/to/myscript --args
Ancak svn, varsa kontrol terminaline bağlanır; senaryoları geçmek --non-interactiveiçin düzenlemek gerçekten bir seçenek değil, çünkü bu birkaç seviye derinlikten geliyor ve her çağrıyı bulduğumdan emin olmak zor olurdu.
Bir komut dosyasını / komutu etkileşimli olmayan bir şekilde, denetleyen bir terminal olmadan çağırmanın bir yolu var mıdır (bu yüzden /dev/ttymevcut değildir)? Stdout / stderr'ın hala terminalime gitmesini tercih ederim.
( Komut dosyasını etkileşimli olmayan bir kabukta çalıştır sorusunu buldum ? Ancak cron ve kullanıcı ortamı arasındaki farkları tartışan cevaplar; Etkileşimsizlik dışındaki tüm farklılıkları zaten ortadan kaldırdım.)