Резюме: На машине с Windows, как я могу сделать ее так, чтобы оболочка Bourne была активной оболочкой Ruby? Вот что я хотел бы случиться:Как использовать оболочку Bourne как активную оболочку Ruby под Windows
irb> exec('echo $SHELL')
/bin/sh
Фактический выход:
irb> exec('echo $SHELL')
$SHELL
Что является то, что произойдет, если я пытаюсь выполнить команду вручную в cmd.exe
. Согласно документам Ruby, это выглядит так: exec
проверок вызовов $RUBYSHELL
и $COMSPEC
(в указанном порядке?). Я пробовал установить $RUBYSHELL
на "C:\Program Files (x86)\Git\bin\sh.exe"
, где у меня есть копия sh
, /bin/sh
и /sh
, ни одна из которых не работает. Похоже, он в основном игнорирует RUBYSHELL
...
Почему?: Я использую драгоценный камень Ruby, который звонит exec
и передает ему результат Shellwords.shelljoin
. Этот вызов ускользает от символов, но только для оболочки Bourne. При запуске под Windows 'cmd.exe
, он кажется barf на любых экранированных символах цитаты и просто игнорирует их. В результате команда не интерпретируется правильно. Я предполагаю, что другой способ решить мою проблему - сообщить мне, есть ли лучший кросс-платформенный способ выполнения последовательности команд escape, но мне кажется, что моя проблема будет решена, если я смогу сделать sh
свою активную оболочку Ruby.
Вы пробовали настройки окна переменные родной среды 'RUBYSHELL' и/или "COMSPEC" (т.е. а не переменные git 'sh')? Я уверен, что ruby / irb на окнах не имеет привязки mingw, что означает, что он будет считывать родную среду Windows, а не среду mingw. – Casper
@ Каспер Да, вот как я это делаю. Я просто просматриваю панель управления и устанавливаю «RUBYSHELL» равным всем, что я хочу. Кажется, они появляются правильно, когда я запускаю 'env' либо в' cmd.exe', либо 'sh.exe'. – aardvarkk
Вы считали, что переопределяете метод, вызывающий проблемы. Небольшое изменение, чтобы изменить способ, которым символы избегают, чтобы быть более дружественным к Windows. – Jato