Как передать переменные из ruby ​​в команду sh - PullRequest
3 голосов
/ 20 января 2012

У меня есть задача rake, довольно много кода. В конце мне нужно использовать sftp и ssh для некоторых вещей. На данный момент я не могу его автоматизировать. Есть ли способ перейти на стандартный вывод?

Это кажется простым вопросом, но я нигде не могу найти ответ

#some ruby code
#more ruby code
sh "sftp myuser@hots" #this opens the sftp console
sh "put file" #this doesn't get run until sftp is exited
sh "put another_file" #neither does this

#more ruby code
sh "ssh host" # opens the ssh console
sh "some_action_on_host" # this doesn't get run until ssh is exited    

Я знаю, что будут способы выполнения sftp и ssh с использованием ruby, но в идеале я просто хочу иметь возможность передавать переменные и команды в консоль

Ответы [ 2 ]

4 голосов
/ 20 января 2012

То есть вы хотите запустить sftp и отправить ему серию команд?Как насчет чего-то вроде:

sftp = IO.popen("sftp myuser@hots", "w+")
sftp << "put file\n"
sftp << "put another file\n"
sftp.flush # make sure to include this
0 голосов
/ 20 января 2012

Если вы не хотите использовать ruby, вы можете заключить команды оболочки в `(символы обратного хода). Эта строка будет передана в метод Kernel. Этот метод выполняет текст как команду оболочки ОС и возвращает вывод команды в виде строки, например ::10000

`ls`

Альтернативный синтаксис `is %x[]. Таким образом, вы можете написать любой скрипт bash:

%x[sftp myuser@hots <<COMMAND
  put #{file}
  quit
COMMAND]

Обратите внимание, что этот синтаксис поддерживает интерполяцию выражений ruby ​​с использованием синтаксиса #{...} (аналогично строковым литералам в двойных кавычках).

...