1

複数のコマンドライン引数を受け入れる Rake タスクがあります。次のようなパラメーターをタスクに渡すための key=value 構文をサポートすることを好みます。

rake deploy verbose=true environment=production dry-run=true

私が抱えている問題は、その「予行演習」の議論です。その Rake タスクを実行すると、次のメッセージが表示されます。

タスク 'dry-run=true' の作成方法がわからない

「dry-run」がコマンドラインの最初、中間、または最後の引数であるかどうかは問題ではありません。「配列」スタイルを使用して引数を受け入れることができます。

rake deploy[true,production,true]

しかし、私はそれが好きではないので、ハイフンを削除できます:

rake deploy verbose=true environment=production dryrun=true

しかし、引数名にハイフンを許可する方法があることを望んでいましたが、これについて議論している場所はどこにも見つかりませんでした。

4

1 に答える 1

2

これらの変数はシェルによって管理されます。rake彼がENV['verbose']シェルに「ねえ、「verbose」と呼ばれる値はありますか?はいの場合は、それを私に渡してください」と尋ねるのはいつですか。

シェルは通常、変数名のハイペンを処理できません。ほとんどのプログラミング言語と同様に、ハイフンは減算操作用に予約されています。

最も簡単な修正は、ハイフンをアンダースコアに置き換えることです。

rake deploy verbose=true environment=production dry_run=true

編集:

もう1つのオプションは、コマンドライン管理により適したものを使用することです。thorは、次のようなコマンドを定義できるようにする必要があります。

deploy --verbose --environment=production --dry-run

EDIT2:

値は、私が思ったようにシェルによって処理されるのではなく、逐語的にrakeに渡されることがわかりました。詳細については、この回答の最初のコメントを参照してください。それにもかかわらず、この回答で提案された解決策は機能します。

于 2012-10-02T11:28:33.340 に答える