В Ruby, на osx, как я могу изменить приглашение из сценария ruby? - PullRequest
0 голосов
/ 10 марта 2019

В Ruby, на osx, как я могу изменить приглашение в скрипте ruby?

Например,

Я бы хотел, чтобы скрипт ruby ​​запускал некоторый код и в зависимости отрезультат, сделайте PS1='\w$ '.или PS1='\t$ '

т.е.

~ $PS1='\w $'
~ $

~ $PS1='\t $'
20:52:23 $

Итак, для начала я только что попробовал скрипт для изменения приглашения

~/$ cat scripttochangeprompt.rb 
`export PS1='\t$ '`
~/$ 

, но он не изменилсяприглашение.

~/$ ruby ./scripttochangeprompt.rb 
~/$ 

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

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Ruby всегда будет работать в подпроцессе.Подпроцесс не может изменить среду родительского процесса.Однако он может выводить данные в формате, удобном для оценки родительским процессом.Вот как, например, ssh-agent устанавливает свои переменные окружения.

#!/usr/bin/env ruby
puts "export PS1='\t$ '"

Затем выполните это так:

eval `changeprompt.rb`
0 голосов
/ 11 марта 2019

Существует несколько способов работы с выполнением команд оболочки, и вы используете тот, который выполняет команду в текущем процессе ruby ​​и возвращает ее результат в ваш скрипт. При таком подходе этот процесс не может изменить оболочку, из которой он был вызван, поэтому он не подходит. Другие способы взаимодействия с оболочкой также используют дочерние процессы или текущий процесс ruby, так или иначе. К сожалению, в большинстве ОС вы не можете установить переменную окружения родительского процесса (а именно оболочки) из дочернего процесса (а именно, вашего сценария ruby). Вот стекопоток выпуск и статья по этому вопросу. В этом выпуске есть некоторые хаки, которые могут удовлетворить вас на практике, но они кажутся мне неясными и неловкими.

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