Cara Anda menyarankan sebenarnya sangat valid. Manual Bash memberikan sintaks deklarasi fungsi sebagai berikut (penekanan milik saya):
Fungsi dideklarasikan menggunakan sintaks ini:
name () compound-command [ redirections ]atau
function name [()] compound-command [ redirections ]
Jadi ini akan benar-benar valid dan mengganti konten outfile
dengan argumen ke myfunc
:
myfunc() {
printf '%s\n' "$1"
} > outfile
Atau, untuk menambahkan outfile
:
myappendfunc() {
printf '%s\n' "$1"
} >> outfile
Namun, meskipun Anda dapat memasukkan nama file target Anda ke dalam variabel dan mengarahkan ulang ke sana, seperti ini:
fname=outfile
myfunc() { printf '%s\n' "$1"; } > "$fname"
Saya pikir jauh lebih jelas untuk melakukan pengalihan di mana Anda memanggil fungsi - seperti yang direkomendasikan di jawaban lain. Saya hanya ingin menunjukkan bahwa Anda bisa memiliki pengalihan sebagai bagian dari deklarasi fungsi.
Dan ini bukan bashism:spesifikasi POSIX Shell juga memungkinkan pengalihan dalam perintah definisi fungsi.
Lakukan pengalihan saat Anda memanggil fungsi tersebut.
#!/bin/bash
initialize() {
echo 'initializing'
...
}
#call the function with the redirection you want
initialize >> your_file.log
Atau, buka subkulit dalam fungsi dan alihkan keluaran subkulit:
#!/bin/bash
initialize() {
( # opening the subshell
echo 'initializing'
...
# closing and redirecting the subshell
) >> your_file.log
}
# call the function normally
initialize
Anda dapat menggunakan untuk exec
untuk pengalihan shell tidak yakin apakah itu akan berfungsi untuk fungsi
exec > output_file
function initialize {
...
}
initialize