Как отмечает Гленн Джекман, дочерний процесс не может изменить текущий рабочий каталог своего родителя (или переменные среды и т. Д.). Если вы не считаете нарушение родительского процесса отладчиком…
Процесс, выполняемый как часть подстановки команды, может записать в stderr, чтобы предоставить вывод пользователю, пока вывод stdout захватывается подстановкой команды:
cd "$(sandbox whatever)"
Где команда sandbox отправляет большую часть своих выводов в stderr, а только последний каталог to для chdir to ’в stdout. Если бы sandbox был сценарием оболочки, вы могли бы сделать это так:
#!/bin/sh
newdir="$(mktemp -dt sandobox)"
{
# do whatever, in a sub-shell
# use a group command (or change the braces to parens to use a sub-shell) to
# capture all stdout and send it to stderr
} 1>&2
echo "$newdir"
Я уверен, что в Ruby можно сделать что-то подобное.