Ana "program" ve diğeri "kitaplık" işlevi gören bir tane olmak üzere iki kabuk betiğim var.Stdout'u stderr kullanmadan bir dosyaya yönlendirdikten sonra terminale yazılır mı?
"Program" daki birkaç yerde: log "$thing" >> "$logfile"
, "log
" kütüphanesinde "tanımlanan bir işlevdir.
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
Sorum: stderr
kullanarak olmadan geri terminale için işlevinden çıkış bazı yönlendirmek için bir yolu var mı?
# library.sh
log() {
# This gets written to the log
echo "`date --rfc-3339=seconds`: $1"
# How to write this to the terminal *without* using stderr?
echo "Info: Message written to log." >&2
}
çünkü benim asıl programda stderr
kullanımını önlemek isteyen bir dosyaya yeniden yönlendirme hataları için bir seçenek, ama terminale göndermek istediğiniz mesajlar her zaman değil hataları, bilgilendirme, ve gerektiği Terminalde görün.
ilginç ... bitenden açıklayabilir ? Ayrıca ilk üç çizginin noktası nedir? Sadece son ikisi ile işe yarıyor gibi görünüyor. Ve, her zaman 'log' çağrıldığında yerine 'program.sh' dördüncü satır koymak gerektiğini varsayalım? –
İlk üç satır, orijinal tanımlayıcıların artık işe yaramaz olduğunu gösteriyor. Daha karmaşık bir program için kolay bir stand-in. – sarnold
İlk üçü, komut dosyasının dışarıdan konuşmanın başka bir yolunun olmadığını gösterir (ör. Başka şeyler yapmakla meşgul). 'Exec' satırını library.sh dizinine koyardım, ancak duruma göre daha yüksek bir sayı veririm (örneğin, 8 ya da öylesine). –