sh -c 'env HOME=$(mktemp -d) fish'
確認してください) ?インストールされている魚のバージョン( fish --version
) :2.4.0
使用するOS /端末:OSX 10.12.2(16C67)/ iTerm2ビルド3.0.13
引数を出力するだけの簡単なスクリプトがあるとしましょう。 次のようになります。
#!/usr/bin/env ruby
p ARGV
その実行は次のようになります。
> ./myscript.rb foo 'hello world'
["foo", "hello world"]
「helloworld」が1つの引数としてグループ化されているのに対し、「hello」と「world」は別々の引数であることに注意してください。
ここで、いくつかのENV変数を設定して任意のfishコマンド(エイリアスを含む)を実行できるfish関数を作成したいと思います。
これはそのような機能の私の最初の試みです
function debug
set -xg DEBUG 1
eval $argv
set -e DEBUG
end
この関数を使用してスクリプトを上から実行すると、次のようになります。
> debug ./myscript.rb foo 'hello world'
["foo", "hello", "world"]
単一の「helloworld」引数が「hello」と「world」に変わったことに注意してください。これは私が望んでいたものではありません。
また、次のアプローチも試しました。
env DEBUG=1 fish -c "$argv"
同じ結果が得られました。
関数の$argv
「helloworld」グループを保持する方法はありますか? 何が足りないのですか?
これはeval
問題であり、特に「$ argv」ではありません。
eval
は、引数がコマンドラインで指定されたかのように解析し、引数がどのように分割されるかは関係ありません。
これについては以前に問題がありましたが、現在は評価を変更できないこと、および他のことを難しくする可能性があるというコンセンサスがありました。
私たちが知りたいのは#154です- command
、そのような変数を受け入れます。
つまり、 command $argv
追加すると、期待どおりに実行されます。
現在、 string escape
、つまりeval (string escape -- $argv)
を使用できることに注意してください。
ありがとう。 (string escape -- $argv)
は機能しました。
最も参考になるコメント
現在、
string escape
、つまりeval (string escape -- $argv)
を使用できることに注意してください。