数行のテキストを印刷するスクリプトがあります。このテキストは、他のプロセスで構成として使用されます。
プログラムを正常に実行すると、標準出力をファイルにリダイレクトし、正常に動作します。
./generateConfig.sh > normal.cfg
しかし、問題は、Normal.cfgが実際に定数であり、追加の引数(-o、引数なしなど)を提供して、ユーザーにファイルとして印刷したり画面に印刷したりするオプションを提供したいということです。
スクリプトの内容が次の場合:
#!/bin/bash
echo "8.8.8.8"
パラメータに従ってファイルまたは標準出力に印刷するように出力をパラメータ化するにはどうすればよいですか?
これはうまくいかないようです:
#!/bin/bash
output="/dev/stdout"
if [ $# -gt 0 ]; then
output="normal.cfg"
fi
echo "8.8.8.8" > $output
ベストアンサー1
いくつかの方法:
機能
#! /bin/sh -
[ "$#" -gt 0 ] && redir=true || redir=false
redir() if "$redir"; then "$@" > normal.cfg; else "$@"; fi
redir echo 8.8.8.8
ニックネーム:
#! /bin/sh -
[ -z "$BASH_VERSION" ] || shopt -s expand_aliases
[ "$#" -gt 0 ] && alias redir='>normal.cfg' || alias redir=
redir echo 8.8.8.8
posh
(無効なエイリアスには適用されません。源泉(.
コマンドを使用)AT&T実装でksh
)。
個人ファイル記述子:
#! /bin/sh -
[ "$#" -gt 0 ] && exec 3> normal.cfg || exec 3>&1
echo 8.8.8.8 >&3
(ksh93を除く多くのシェルはfd 3にclose-on-execフラグを設定しないため、手動で実行されたコマンドを閉じる必要があるかもしれません)