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, patch
tersine çevrilmiş bir yama ile ne svn
yapacağını soracak ve şifreleri isteyecek, ancak etkileşimli olmayan bir şekilde çalıştırıldıklarında ne olacağını görmem gerekiyor.
patch
Etkileşimli olmadığını ikna etmek oldukça kolaydır; Sadece stdout
bir tty olmayan yönlendirmek gerekir :
$ </dev/null > >(cat) /path/to/myscript --args
Ancak svn
, varsa kontrol terminaline bağlanır; senaryoları geçmek --non-interactive
iç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/tty
mevcut 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.)