首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Bash 函數級重定向:讓函數擁有專屬 I/O 流

     編輯:關於C語言

Bash 不僅支援命令級重定向,函數定義尾端同樣可接重定向,使該函數每次被呼叫時自動套用對應的標準輸入/輸出/錯誤導向。這是一項鮮為人知但極具實用價值的特性。

基本語法

function myfunc() {
    echo "Hello"
} < input.txt > output.txt 2> error.log

呼叫 myfunc 時,自動從 input.txt 讀取 stdin,stdout 寫入 output.txt,stderr 寫入 error.log。

搭配變數動態切換輸出

#!/bin/bash
function myfunc() {
    echo "Hello World CoolShell.cn"
}
out=out1.txt
myfunc
out=out2.txt
myfunc

兩次呼叫分別輸出到 out1.txt、out2.txt。

實用模式:統一錯誤日誌

#!/bin/bash
log=err.log

function error() {
    echo "$*" >&2
}

function task1() { error "task1 failed"; }
function task2() { error "task2 failed"; }

{
    task1
    task2
} 2>$log

區塊 { ... } 同樣支援重定向,且不建立子 shell(( ... ) 會建立子 shell,變數修改不回傳)。

重定向優先順序:呼叫端 vs 定義端

定義端重定向優先級更高,會覆蓋呼叫端的重定向:

function f() { echo hello; } > def.txt
f > call.txt
# 實際輸出寫入 def.txt,call.txt 為空

Here Document 導入標準輸入

function reader() {
    while read line; do echo "$line"; done
} <<EOF
hello
coolshell.cn
EOF

reader

總結

  • 函數級重定向屬於函數定義一部分,隨函數被呼叫時生效。
  • 可搭配變數實現動態 I/O 導向。
  • 適用於統一錯誤日誌、測試資料注入等場景。
  • 避免在子 shell (...) 中使用,除非刻意隔離環境。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved