Я использую iruby в своем ноутбуке jupyter, и ядро ​​работает должным образом и принимает все виды синтаксиса ruby. К сожалению, команда %% bash приводит к ошибке. Так что никаких консольных команд нет ...

3
F.M. 5 Янв 2021 в 17:29

1 ответ

Лучший ответ

Для выполнения команд на системном уровне вы можете использовать любое из следующего: Kernel#system, %x (подробнее о процентных строках см. ниже) или Kernel #` ("обратные галочки")

system('pwd')
%x(pwd) 
`pwd`

Все они будут выполняться в процессе и возвращать результат в виде строки.

Если вы хотите, чтобы команды выполнялись в отдельном процессе, вы можете использовать другие параметры, такие как IO.popen или fork { exec('pwd') } (если поддерживается ОС)

TL; DR Почему возникает ошибка

Теперь, чтобы объяснить вашу фактическую ошибку и почему она возникает.

Эта строка - но %%bash интерпретируется Ruby и ищет закрывающий %. % - еще один способ создания строкового литерала (называемого " Процентная строка ").

Интересная часть этого синтаксиса заключается в том, что у него действительно нет определенного разделителя. (по сути, большинство не буквенно-цифровых символов могут открываться и закрываться)

%{bash}
#=> "bash" 
%(bash)
#=> "bash"
%|bash| 
#=> "bash"

В последней строке документов говорится

Если вы используете "(", "[", "{", "<", вы должны закрыть его с помощью ")", "]", "}", ">" соответственно. Вы можете использовать большинство других не буквенно-цифровых символов для процентных разделителей строк, таких как «%», «|», «^» и т. Д.

В вашем случае % используется в качестве разделителя: например,

%%bash%
#=> "bash" 

Но поскольку нет закрытия %, это интерпретируется как:

%%bash
pwd 
--EOF--

Таким образом, вы получаете ошибку, потому что String ("bash\npwd) не завершен.

1
engineersmnky 7 Янв 2021 в 00:30