GNU/Linux >> Linux の 問題 >  >> Linux

Linux で関数ブロックからファイルに出力をリダイレクトする

あなたが提案する方法は、実際には完全に有効です。 Bash のマニュアルでは、関数宣言の構文を次のように指定しています (強調は私のものです):

<ブロック引用>

関数は次の構文を使用して宣言されます:

name () compound-command [ redirections ]

または

function name [()] compound-command [ redirections ]

したがって、これは完全に有効で、 outfile の内容を置き換えます myfunc への引数付き :

myfunc() {
    printf '%s\n' "$1"
} > outfile

または、 outfile に追加するには :

myappendfunc() {
    printf '%s\n' "$1"
} >> outfile

ただし、次のように、ターゲット ファイルの名前を変数に入れてリダイレクトすることはできますが、

fname=outfile

myfunc() { printf '%s\n' "$1"; } > "$fname"

他の回答で推奨されているように、関数を呼び出す場所でリダイレクトを行う方がはるかに明確だと思います。 できることを指摘したかっただけです 関数宣言の一部としてリダイレクトがあります。

これはバシズムではありません。POSIX シェル仕様では、関数定義コマンドでのリダイレクトも許可されています。


関数を呼び出すときにリダイレクトを行います。

#!/bin/bash
initialize() {
  echo 'initializing'
  ...
}
#call the function with the redirection you want
initialize >> your_file.log

または、関数でサブシェルを開き、サブシェルの出力をリダイレクトします:

#!/bin/bash
initialize() {
  (  # opening the subshell
    echo 'initializing'
    ...
  # closing and redirecting the subshell
  ) >> your_file.log
}
# call the function normally
initialize

exec に使用できます シェルのリダイレクトについては、関数で機能するかどうかわかりません

exec > output_file
function initialize {
  ...
}
initialize

Linux
  1. Linuxターミナルでリダイレクトを使用して、どこからでもデータを読み書きできます

  2. Linuxで出力をファイルとStdoutにリダイレクトする方法

  3. Linux – Freeからの出力のBuffers列?

  1. Python から Linux コマンドを実行する

  2. fopen() は Linux のスレッドセーフ関数ですか?

  3. Linuxコマンド出力をファイルに出力するには?

  1. Linuxでコマンド出力をファイルに保存する方法

  2. Linux/Unixでの入力/出力リダイレクト

  3. Linux で URL からファイルをダウンロードする方法