Execコマンドの変数を介してリダイレクトオプションを指定します。

Execコマンドの変数を介してリダイレクトオプションを指定します。

変数(特定の条件などに応じて設定できます)でリダイレクトコマンド/オプションを指定できるようにしたいです。しかし、このbashスクリプトを実行すると、次のようになります。

REDIRECT=">>test"
exec echo hi ${REDIRECT}

私は次のようになります(bash -xを介して出力):

+ REDIRECT='>>test'
+ exec echo hi '>>test'
hi >>test

execがREDIRECT変数の値を文字通り置き換えるのではなく、単一引用符の中に入れるようです。

この問題をどのように解決/解決できますか?

ベストアンサー1

使用を避けるにはeval

opt_file=""

# Command line parsing bit here, setting opt_file to a
# file name given by the user, or leaving it empty.

if [[ -z "$opt_file" ]]; then
  outfile="/dev/stdout"
else
  outfile="$opt_file"
fi

exec echo hi >>"$outfile"

同じことを行う少し短いバリエーションです。

# (code that sets $opt_out to a filename, or not,
# and then...)

outfile=${opt_file:-/dev/stdout}
exec echo hi >>"$outfile"

おすすめ記事