Child bash идентичен вызывающему родителю

323
Andrew Wood

Можно ли вызвать bash, чтобы в новой оболочке присутствовало все, что касается моего окружения (псевдонимы, функции, экспортированные / неэкспортированные переменные и т. Д.)?

Я бы согласился на получение переменных оболочки, которые не являются частью моего окружения. Я бегу, bash --norcи первое, что я замечаю, я потерял $ PS1 и свои lsцвета. Я мог бы просто экспортировать эти переменные перед вызовом bash, но я беспокоюсь о множестве других вещей, которые я мог бы пропустить.

0

2 ответа на вопрос

1
cledoux

Возможно, вы захотите взглянуть на команду aliasи set. При запуске без параметров aliasбудут перечислены все определенные параметры и setперечислены все переменные и функции. Перенос вывода этих команд во временный файл и последующее указание bash прочитать этот файл как файл rc может выполнить то, что вы ищете.

Это самое близкое, что я когда-либо был, но я наконец-то понял, что то, чего я действительно хочу, невозможно. Я хочу написать сценарий Perl, который устанавливает мою среду. Он будет делать что-то, устанавливать переменные и, наконец, `exec bash`. Я не могу позволить, чтобы окружение было испорчено rc init файлами, но я хочу такие вещи, как ls раскраска и спуск PS1. Я думаю, что, возможно, лучше всего сделать так, чтобы скрипт Perl печатал изменения среды, и чтобы пользователь вызывал его с обратными галочками. Andrew Wood 13 лет назад 0
в зависимости от сложности сценария perl, пусть он напишет свой временный rc-файл, а затем вызовет bash с помощью: bash --rcfile Это не загрузит общесистемный или пользовательский rc-файл, а только указанный файл. cledoux 13 лет назад 0
Я был на полпути к тому, чтобы сделать именно это, когда понял, что у скрипта не будет доступа к псевдонимам и функциям его родителя - только к его среде. Andrew Wood 13 лет назад 0
0
grawity

Нет.

Однако вы можете включить автоматический экспорт функций и переменных, добавив их set -aв начало вашего rcскрипта.