#ruby #bash #scripting
#ruby #bash #сценарии
Вопрос:
Я использую bash-скрипт для запуска ruby-скрипта. это работает очень хорошо, если вы находитесь в sir скрипта, но если вы не в этом каталоге, скрипт ведет себя странно, потому что его нет в пути к файлу.
#!/bin/sh
jruby -Ilib script.rb $@
Я добавил это в скрипт.
mypath=`realpath $0`
cd `dirname $mypath`/..
Это заставляет скрипт запускаться из любого места, которое я хочу. проблема в том, что его аргументы не изменяют свои относительные имена путей.
Я использую trollop для синтаксического анализа входных данных.
Мой вопрос: как я могу изменить ввод пути во входных данных, чтобы это был правильный относительный путь, когда я добавляю аргументы в ruby-скрипт. Я был бы доволен решением ruby для этой проблемы.
Ответ №1:
При этом используется конкретно bash. Он собирает массив аргументов, вызывая realpath
для каждого.
#!/bin/bash
mypath=$(realpath $0)
args=()
for arg; do
args =( "$(realpath "$arg")" )
done
cd "$(dirname "$mypath")"/..
jruby -Ilib script.rb "${args[@]}"
Я щедро разбросал двойные кавычки по всему скрипту для обработки файлов и путей, содержащих пробелы.
Комментарии:
1. Спасибо, я думаю, что могу использовать ваш ответ только для аргументов, которые приводят к аргументам для моего ruby-скрипта, и просто передать остальное.
Ответ №2:
В итоге я сделал это так,
Я обнаружил, что использование переменных среды работает лучше всего
#!/bin/bash
if [ "$EN_VARE"="" ]
then
EN_VARE="."
fi
jruby -I$EN_VARE/lib $EN_VARE/lib/main_file.rb $@