Нет, вы не можете взаимодействовать с родительской оболочкой из подпроцесса, который она породила (без активного участия этой оболочки, что недоступно разумно / практически недоступно в данном сценарии) - но вы можете экспортируйте переменные, чтобы сделать их доступными для новых оболочек, запущенных в дочерних процессах.
Выполнение
set -a
... сделает любую переменную, определенную в будущем, автоматически экспортированной в среду, дажебез явной команды export
.
Поскольку (в отличие от функции C system()
) vim's system()
учитывает переменную окружения SHELL
, если SHELL=/bin/bash
(или :set shell=/bin/bash
былозапустить в vim), вы также можете вызывать экспортированные функции из vim.То есть, если вы определяете функцию и экспортируете ее следующим образом:
foo() { echo "bar"; }
export -f foo
... тогда вы можете вызвать ее с помощью !foo
изнутри vim.
Даже тогда, однако,это выполняется в новом, временном экземпляре оболочки, а не в исходном родительском процессе.