、のようなカッコでディレクトリ名:私はルビーでsystem
呼び出しでそれらを参照すると、私はエスケープする必要がありなぜRubyの `system`は` shellescape`ではないのですか?シェルの中で参照する場合
/tmp/\(example\)
:
/tmp/(example)
は次のようにエスケープする必要がありますそれらが最初の議論であるかどうかに依存して、そうでなくてもよい。
最初の引数としてエスケープされていないディレクトリ。失敗。
system('/tmp/(example)/script') #>> sh: -c: line 0: syntax error near unexpected token `example' #>> sh: -c: line 0: `/tmp/(example)/script' #=> false
最初の引数としてエスケープされたディレクトリ。成功。
system('/tmp/(example)/script'.shellescape) #=> true
第2引数としてエスケープされていないディレクトリ。成功。
system('touch', '/tmp/(example)/script') #=> true
第2引数としてエスケープされたディレクトリ。失敗。
system('touch', '/tmp/(example)/script'.shellescape) #>> touch: /tmp/\(example\)/script: No such file or directory #=> false
system
は、すべての引数が、コマンド(最初の引数)の名前をエスケープしているようです。
system("#{__dir__}/something")
- なぜ
system
がこのように振る舞うん:?それは、コマンドの相対パスを持っているようなスクリプトで問題ですか - すべてをエスケープするネイティブオプションはありますか?
"私は'#system'が存在しないと思われがちで、['Open3'](http://ruby-doc.org/stdlib-2.4.2/libdoc/open3/rdoc/Open3 .html)(...) " 'Open3'はこの状況で同じ動作をします。コマンドを実行したいが出力を気にしない場合は 'system'を使い、それ以外の場合は' Open3'を使います。 – user137369