Как изменить каталог в терминале из сценария ruby? - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь создать приложение CLI, которое клонирует git-репозиторий, создает ветку и компакт-диски во вновь клонированный репозиторий. Я могу достичь этого, за исключением той части, где мне нужно записать компакт-диск во вновь клонированный репозиторий. Каков наилучший способ изменить каталог в терминале, на котором выполняется мой сценарий ruby, с помощью указанного сценария ruby.

Dir.chdir "#{z}"

Изменяет только каталог внутри скрипта, но не в терминале.

Я попытался написать дополнительный сценарий ruby, который выполняет компакт-диск, и вызывал его в обратных чертах в моем первом сценарии ruby, который не удался.

Ради тестирования я попытался создать вторичный скрипт ruby, который будет записывать компакт-диски в предыдущий каталог.

sidescript.rb

puts "cd .."

и в моем главном сценарии у меня есть

`ruby ./sidescript.rb`

Мне известно, что выполнение сценария ruby ​​разветвляет текущий терминал и начинает работать на нем, поэтому такие команды, как "system cd [my_path]" или exec, не работают.

Есть ли возможность каким-либо образом написать команду на текущем терминале для изменения каталога (вместо разветвленного терминала приложения ruby)?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Вы можете попробовать использовать вот так

`cd path_to_directory && ruby sidescript.rb`
1 голос
/ 05 июля 2019

Насколько мне известно, нет, вы не можете. Единственный способ, которым вы могли (возможно) сделать это, это использовать системный вызов ptrace, но даже в этом случае вам нужно будет использовать пользовательский терминал, который бы его поддерживал.

Однако то, что вы можете сделать, соответствует духу вашего sidescript.rb. Но вместо того, чтобы выполнять его в вашем основном скрипте, вам придется делать это прямо из вашего терминала:

# sidescript.rb

puts 'cd my/new/path'
# In your terminal

$(ruby sidescript.rb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...