Dalam skrip bash saya mencoba untuk menjaga variabel saya lokal ke fungsi di mana pun saya bisa dan kemudian melewati apa yang saya butuhkan dari fungsi seperti di bawah ini
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
Tetapi apakah mungkin untuk melakukan ini sambil memasukkan gema fungsi itu sendiri sehingga jika fungsi memiliki pesan sendiri untuk dihasilkan, saya tidak harus menangkapnya dalam sebuah variabel
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
echo "This function is done now" # do not return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL" # should only echo 'value'
bash
shell-script
function
TheLovelySosisage
sumber
sumber
function foo()
sintaks lama, non-POSIX ? Anda bisa mendapatkan kompatibilitas POSIX yang lebih baik dengan 9 sedikit penekanan tombol.Jawaban:
Apa pun yang dicetak oleh fungsi dapat ditangkap jika Anda menangkap aliran output yang tepat. Jadi cara termudah untuk mencetak sesuatu dan menyimpan beberapa output lainnya adalah dengan mengarahkan output berlebihan ke kesalahan standar:
Kemungkinan lain adalah untuk masuk ke file daripada mencetak pesan log secara langsung, misalnya menggunakan sesuatu seperti ini:
Yang mengatakan, fungsi Bash tidak dapat mengembalikan variabel . Satu-satunya nilai "kembali" yang sebenarnya adalah kode keluar. Karena alasan ini ( dan banyak lainnya ), jika Anda ingin pencatatan yang dapat diandalkan, mengembalikan nilai, penanganan pengecualian, dan lainnya, Anda ingin menggunakan bahasa yang berbeda seperti Python, Ruby atau Java.
sumber
Anda dapat menyajikan pesan info tentang kesalahan standar:
Beberapa saran lain ada di artikel Jurnal Linux ini : gunakan variabel global (yang Anda sebutkan tidak Anda sukai), atau berikan nama variabel untuk mengembalikan hasilnya.
sumber
/dev/stderr
menunjuk ke fd 2 dan masih dapat diarahkan oleh&>blah
atau2>blah
./dev/tty
mungkin lebih baik.