У меня есть файл Ruby, и я запускаю его как ruby file.rb "parameters"
. Я предпочитаю запускать его как regtask parameters
без необходимости включать ruby
и имя файла каждый раз. Я хочу, чтобы он был на том же уровне, что и ls
. Как бы я это сделал?Как создать скрипт Ruby в команде bash?
ответ
Редактировать файл, убедитесь, что это первая линия, так что ваша система знает, как выполнить файл:
#!/usr/bin/env ruby
Далее, изменения прав доступа к файлу, чтобы сделать его исполняемым:
chmod a+x file.rb
И, наконец, переименуйте его и переместите его где-нибудь, где он будет выполнен без необходимости писать полный путь:
mkdir -p ~/bin
mv file.rb ~/bin/regtask
(Большинство систем автоматически добавит ~/bin
в PATH
, если он существует; если нет, вам придется добавить его в PATH
самостоятельно в свои файлы автозагрузки.)
Если вы использовали редактор Windows, вам нужно будет исправить окончания строки. Еще лучше, прекратите использование редактора Windows или найдите тот, который даст вам адекватный контроль над окончаниями строк. Текстовые файлы Unix имеют только окончание строк LF, в то время как стандартом для Windows является CRLF. – tripleee
Смотрите, вот что меня смущает. Могу ли я просто добавить его в мой/use/local/bin вместо создания корзины в моем домашнем каталоге и включить ее при запуске? Лучше ли практика? Зачем мне делать домашнюю директорию? –
'~/bin' за вами. '/ usr/local/bin' для всех пользователей. Оба варианта работают, но они делают разные вещи. – Amadan
Это должно помочь .. Пожалуйста, дайте мне знать, если у вас возникнут проблемы.
http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/
Создание Руби скрипт исполняемым
Это общие знания в * NIX сообщества, но и для многих новых разработчиков превращая скрипт на Ruby в исполняемую программу командной строки сродни магии. Хотя в Интернете есть другие ссылки, для публикации здесь я кратко объясню, как перейти от запуска скрипта Ruby, напрямую используя Ruby, для запуска скрипта по его имени.
Начнем с того, что мы имеем простой скрипт Ruby, который печатает «привет» в командной строке. Имя нашего сценария будет greeter.rb
. Файл содержит одну строку кода: Рубиновый
puts "Hello!"`
Чтобы запустить сценарий, мы должны ввести ruby greeter.rb
. Было бы неплохо просто набрать greeter
и все-таки запустить скрипт? Да, было бы.
Во-первых, нам нужно сообщить Bash, что делать с нашим файлом, так как мы не передадим сценарий Ruby напрямую. Чтобы сделать это, мы добавим следующее в самом верху нашего сценария:
#!/usr/bin/env ruby
puts "Hello!"
Первая строка представляет собой директива Bash и в основном говорит Bash, какая программа запустить наш файл с запрашивая текущую настроенную версию Ruby, как указано командой env
. Подробнее о том, как работает env
, попробуйте ввести man env
в командную строку.
Во-вторых, нам нужно сделать наш скрипт исполняемым, что требует изменения разрешений на файл. Если концепция прав доступа к файлам является новой, прочитайте об этом здесь. Базисно, файлы имеют три типа разрешений. Их можно читать, писать и исполнять. Большинство файлов обычно начинаются с доступа только для чтения и записи. Поскольку мы хотим выполнить наш скрипт, нам придется предоставить ему разрешения на выполнение.
Выполнение этой задачи - просто простая команда Bash.В командной строке перейдите в каталог, содержащий файл greeter.rb
. Теперь, чтобы проверить разрешения, выполните команду:
ls -l greeter.rb
Выходной сигнал будет выглядеть примерно так:
-rw-r--r-- 1 username staff 13 Feb 16 21:10 greeter.rb
Ваше имя пользователя будет отображаться в месте username
и дата создания будет, естественно, разные, но в остальном вывод будет почти идентичным. Первая часть линии - это часть, на которую возложена радость. Буквы r
и w
определяют разрешения на чтение и запись.
Мы собираемся добавить разрешения выполнения, которые будут отображаться как x в этой строке. Чтобы добавить права выполнения, выполните следующую команду.
chmod 755 greeter.rb
Теперь, если вы проверить права доступа к файлам снова ls -l greeter.rb
, выход должен быть немного по-другому.
-rwxr-xr-x 1 username staff 13 Feb 16 21:20 greeter.rb
Присутствие x
указывает, что файл может быть запущен непосредственно без вызова Руби первым. Следующая команда должна получить наш файл, чтобы сказать «привет».
./greeter.rb
Практически там. Теперь нам просто нужно избавиться от префикса ./
, который сообщает Bash, где искать greeter.rb
, т. Е. В текущем каталоге. Прежде чем завершить этот последний шаг, давайте переименуем наш файл только greeter
.
mv greeter.rb greeter
Теперь, для последнего шага. Каждый раз, когда мы вызываем программу Bash, например, ls
, chmod
, mv
и т. Д., Bash ищет через предопределенный список папок, ищущих эти программы. Это называется дорогой. Чтобы узнать, на каком пути указан ваш компьютер, попробуйте:
echo "$PATH"
Результат должен быть длинной строкой из различных системно-важных папок. Нам нужно разместить наше приложение в одной из этих папок. Традиционно лучше оставить папки, такие как /usr/bin/
и /bin/
. Вместо этого любые добавления пользователя должны быть помещены в /usr/local/bin/
. Если эта папка не существует, создайте его с:
mkdir -p /usr/local/bin/
Теперь мы можем либо переместить нашу Greeter в эту папку, или оставить заявку, где это и просто создать мягкую ссылку (или псевдоним в OS X терминов) в папке /usr/local/bin/
. Чтобы создать псевдоним, мы будем использовать команду ln
. Из каталога, где greeter
жизни, тип:
ln -s $PWD/greeter /usr/local/bin/
Обратите внимание, что переменная $PWD
будет расширяться абсолютный путь к нашему Greeter сценарию. Теперь мы закончили, и мы можем просто ввести greeter
, чтобы вызвать наш скрипт Ruby!
В качестве сноски, если какая-либо из приведенных выше команд Bash кажется запутанной, попробуйте найти свою страницу, набрав man <command>
.
'ln' не создает псевдоним, он создает softlink или hardlink даже в OS X. Вам нужно использовать опцию Drager Option (или использовать' osascript' для [имитации этого] (http://stackoverflow.com)/questions/7072208/how-do-i-create-a-macintosh-finder-alias-from-the-command-line)), чтобы создать псевдоним Mac OS. – Amadan
Я этого не понимал ... Спасибо за головы! – contact411
Вы можете переименовать файл и удалить расширение '.rb', чтобы упростить ввод имени файла, но вы не можете избавиться от ввода имени файла.Вам все равно придется вводить его как имя команды (вместо параметра команды ruby). – sawa