Как сделать Ruby совместимым с bash - PullRequest
0 голосов
/ 16 мая 2019

У меня есть скрипт ruby, который использует open3 для запуска команд оболочки внутри скрипта, и я использую Ubuntu 18.04 и bash.

Когда я запускаю этот скрипт, он выдает такие ошибки, как 0: sh: 2: pushd: not found. Я искал, и одна вещь, которую я нашел, была https://stackoverflow.com/a/17044484/5553963, которая подсказала, что мы используем ENV["SHELL"] = "/bin/bash", но когда я проверил свою переменную окружения, у меня уже было это:

$ printenv "SHELL"
/bin/bash

Как я могу заставить этот скрипт работать на моей машине?

Первая часть этого скрипта:

#!/usr/bin/env ruby

require 'open3'

def run(i, cmd)
    res = ""
    Open3.popen3(cmd) do |stdin, stdout, stderr, thread|

И моя рубиновая версия: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

1 Ответ

5 голосов
/ 16 мая 2019

Предполагая, что вам нужна встроенная оболочка pushd, вам нужно явно вызвать bash в вашей системной команде, поскольку ruby ​​не ссылается на вашу переменную $ SHELL. Что-то вроде:

Open3.popen3("bash -c '#{cmd}'")

должен сделать трюк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...