[ruby-list:50434] Re: bundle exec での日本語を含む引数の文字化け workaround (Windows環境)
From:
Toshihiko Ichida <dogatana@...>
Date:
2016-10-16 09:43:13 UTC
List:
ruby-list #50434
市田です。
西山さん、中田さん、情報ありがとうございます。
On 2016/10/16 17:47, Nobuyoshi Nakada wrote:
> なかだです。
>
> On 2016/10/16 16:53, Kazuhiro NISHIYAMA wrote:
>> At Sun, 16 Oct 2016 14:38:13 +0900,
>> Toshihiko Ichida wrote:
>>>
>>> - Kernel.exec(*args)
>>> + Kernel.exec(args.join ' ')
>>
>> Linux などでは普通 Shellwords.shelljoin などを使うと思うのですが、
>> Windows では普通の Array#join でも大丈夫なのでしょうか?
>
> cmd.exeのエスケープ処理はshのとは別物なので、どちらも同程度にダメです。
確かに Array#join だと空白を含む引数はだめなのははっきりしています。
空白だけなら
cmdline = args.map { |x| x.include?(' ') ? "\"#{x}\"" : x }.join(' ')
などとすれば良さそうですが、他に処理しないといけないケースがあるので
しょうか?
なお、Kernel#exec(cmdline) の場合、実行したいものがexeファイルの場合、
次の動作となります。
1.command と .exe を省略して実行
=> path に入っているものを見つけてくれる
カレントディレクトのものは見つけてくれない
2.command.exe と明示して実行
=> カレントディレクトリのものが実行される
引数の先頭に実行ファイル名が追加され実行される(引数が増える)
仕様なのかどうか判別はできませんが、ちょっと不思議です。