2015-05-01 2 views
-1

У меня есть этот Баш скрипт, который делает что-то с данным входом и передает его рубиновым сценарий:Run Баш скрипт

QUERY=$(iconv -f UTF8-MAC <<<'{query}') 
/usr/bin/ruby start.rb $QUERY 

Это прекрасно работает до сих пор.

Я хочу запустить первую строку этого скрипта внутри скрипта Ruby, который передает ввод другому скрипту Ruby. Я пытаюсь сделать это, используя back-ticks в Ruby, но он не работает так, как я хочу, поскольку query не преобразован. Что я здесь делаю неправильно?

input = `$(iconv -f UTF8-MAC <<<'{query}')` 
Start.go(input) 
+0

Пожалуйста дайте весь код и а также выход вашей программы и ее ожидаемый результат. У вашего рубинового скрипта всего 3 строки, и я думаю, что последние два не нужны для воспроизведения проблемы, поэтому их следует удалить. Не заставляйте нас гадать, какие симптомы вы на самом деле видите, покажите нам. –

+0

Вы правы, я удалил строку из моего вопроса и в следующий раз предоставит вам дополнительную информацию. Эта проблема решена. – Linus

ответ

1

Я думаю, что вы хотите интерполировать query, и строку интерполяция допускается в обратных кавычках (в дополнении к строкам в двойные кавычках). Синтаксис интерполяции строк ruby ​​- #{string_to_interpolate}.

Например, если вы поместите следующее в .rb. файл и запустить его на системе Windows, - тогда MSPaint запустит:

var = 'mspaint.exe' 
`#{var}` 

Похоже, вы просто отсутствует символ # на этой линии:

input = `$(iconv -f UTF8-MAC <<<'#{query}')` 
+0

Я думаю, что забыл «скобки вокруг интерполяции». Когда я использую это: input = '$ (iconv -f UTF8-MAC <<< '" # {input} "')', я получаю ошибку: ' sh: thetextientered: command not found' – Linus

+0

Попробуйте без двойных кавычек вокруг 'input' (т.е.' '# {input} '' вместо '' # # {input}" ''. – orde

+0

Но интерполяция строк работает только с" а не с?? – Linus

Смежные вопросы