Не может быть сделано. Дочерние процессы не могут изменять среду своих родителей (включая текущий рабочий каталог родителя). Трюк .
(также известный как source
) работает только со сценариями оболочки, потому что вы говорите оболочке запускать этот код в текущем процессе (а не создавать подпроцесс для его запуска). Просто для удовольствия попробуйте поместить exit
в файл, который вы запускаете таким образом (спойлер: вы выйдете из системы).
Если вы хотите иметь иллюзию этой работы, вам нужно создать функции оболочки, которые вызывают ваш скрипт на Ruby и имеют функцию оболочки, которая выполняет cd
. Поскольку функции выполняются в текущем процессе, они могут изменить каталог. Например, учитывая этот скрипт ruby (с именем temp.rb):
#!/usr/bin/ruby
print "/tmp";
Вы можете написать эту функцию BASH (скажем, у вас ~/.profile
):
function gotmp {
cd $(~/bin/temp.rb)
}
И тогда вы можете сказать gotmp
в командной строке и изменить каталог.