4

現在のディレクトリの Subversion パッチ ファイルを作成する bash スクリプトがあります。-zスクリプトへの引数として与えられた場合、生成されたファイルを圧縮するように変更したいと思います。

関連する部分は次のとおりです。

zipped=''
zipcommand='>'

if [ "$1" = "-z" ]
then
   zipped='zipped '
   filename="${filename}.zip"
   zipcommand='| zip >'
fi

echo "Creating ${zipped}patch file $filename..."

svn diff $zipcommand $filename

に含まれる|またはを引数としてに渡すため、これは機能しません。>$zipcommandsvn

これは簡単に回避できますが、問題は、これらの種類の演算子が変数に含まれているときに使用できるかどうかです。

ありがとう!

4

4 に答える 4

5

私はこのようなことをします(bash -cまたはevalを使用します):

zipped=''
zipcommand='>'

if [ "$1" = "-z" ]
then
   zipped='zipped '
   filename="${filename}.zip"
   zipcommand='| zip -@'
fi

echo "Creating ${zipped}patch file $filename..."

eval "svn diff $zipcommand $filename"
# this also works: 
# bash -c "svn diff $zipcommand $filename"

これは機能しているように見えますが、私のバージョンのzip(Mac OS X)では、次の行を変更する必要がありました。

zipcommand='| zip -@'

zipcommand='| zip - - >'

編集:evalを使用する@DanielBungertの提案を組み込みました

于 2008-09-24T18:59:16.960 に答える
2

evalはあなたが探しているものです。

# eval 'printf "foo\nbar" | grep bar'
bar

その上で引用符に注意してください。

于 2008-09-24T19:01:13.743 に答える
0

またはzsh、グローバルエイリアスを定義できるシェルを試してみてください。例:

alias -g L='| less'
alias -g S='| sort'
alias -g U='| uniq -c'

次に、このコマンドを使用します(これは、後ろから見た人にとってはやや不可解です;-))

./somecommand.sh S U L

HTH

于 2008-09-25T09:09:47.790 に答える