Fish-shell: eval $ argvは引数を解析解除します

作成日 2017年01月07日  ·  3コメント  ·  ソース: fish-shell/fish-shell

  • [x]魚2.4.0で問題が発生するかどうかを確認しましたか?
  • [x]サードパーティのカスタマイズなしで魚を試しました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」グループを保持する方法はありますか? 何が足りないのですか?

question

最も参考になるコメント

現在、 string escape 、つまりeval (string escape -- $argv)を使用できることに注意してください。

全てのコメント3件

これはeval問題であり、特に「$ argv」ではありません。

evalは、引数がコマンドラインで指定されたかのように解析し、引数がどのように分割されるかは関係ありません。

これについては以前に問題がありましたが、現在は評価を変更できないこと、および他のことを難しくする可能性があるというコンセンサスがありました。

私たちが知りたいのは#154です- command 、そのような変数を受け入れます。

つまり、 command $argv追加すると、期待どおりに実行されます。

現在、 string escape 、つまりeval (string escape -- $argv)を使用できることに注意してください。

ありがとう。 (string escape -- $argv)は機能しました。

このページは役に立ちましたか?
0 / 5 - 0 評価