запуск ruby-скрипта с аргументами в отношении файлов из bash-скрипта

#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 $@