Исходный сценарий оболочки в среду в рамках рубинового сценария

ffmpeg (инструментарий для обработки видеоданных) записан в прямом C (и ассемблер), но использование объектно-ориентированного стиля. Это полно структур с указателями функции. Существует ряд функций фабрики, которые инициализируют структуры с соответствующими указателями "метода".

7
задан durron597 25 August 2015 в 15:21
поделиться

3 ответа

Причина, по которой это не работает для вас, заключается в том, что b / c Ruby запускает свою систему команды в отдельных оболочках. Поэтому, когда одна системная команда завершается, оболочка, из которой был получен ваш файл, закрывается, и все переменные среды, установленные в этой оболочке, забываются.

Если вы не знаете имя исходного файла до времени выполнения, тогда Roboprog's ответ - хороший подход. Однако, если вы заранее знаете имя исходного файла, вы можете быстро взломать его с помощью строки hashbang.

% echo sourcer.rb
#!/usr/bin/env ruby
exec "csh -c 'source #{ARGV[0]} && /usr/bin/env ruby #{ARGV[1]}'"
% echo my-script.rb
#!/usr/bin/env ruby sourcer.rb /path/to/file/I/want/to/source.csh
puts "HAPPYTIMES = #{ENV['HAPPYTIMES']}"
% ./my-script.rb
HAPPYTIMES = True

Все это только поможет вам использовать установленные переменные окружения в вашем скрипте ruby, а не устанавливать их в вашей оболочке (поскольку они забываются, как только процесс ruby ​​завершается). Для этого вы застряли с командой source .

4
ответ дан 6 December 2019 в 23:11
поделиться

You are going to have to write a function to run something like the following, and capture the output ("backtick" operation):

/bin/csh -e '. my_script ; env'

Loop on each line, match against something like

/^(\w+)=(.*)$/

Then use the first match capture as the var name, and the second capture as the var value.

(yes, I'm hedging on the fact that I know Perl way better than Ruby, but the approach would be the same)

1
ответ дан 6 December 2019 в 23:11
поделиться
system 'source /file/I/want/to/source.sh'

Не уверен, что это сделает то, что вы хотите. Он выполнит исходную команду в подоболочке. Попробуйте и убедитесь, что он делает то, что вам нужно.

-4
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: