Несколько лет назад уже были сообщения о проблемах в областях как ипотечные программы, делающие вычисления по 30-летним кредитам: 2008 + 30 = 2038.
Можно использовать замену процесса для важного создания ~/.bashrc, который только существует для bash -i
вызов как так:
bash --rcfile <(echo "PS1='foo: '") -i
Я думаю, что было бы лучше использовать env PS1="foo: " /bin/bash --norc -i
вместо того, чтобы использовать --rcfile
опция. Среда сохраняется, не перезаписывается точечными файлами, и переменная среды PS1 установлена прежде, чем ввести оболочку.
Вы могли бы также хотеть думать об открытии ограниченной оболочки, если программа вызова дает дополнительный privs. env PS1="foo: " PATH=$RESTRICTED_PATH /bin/rbash --norc -i
для любого значения Вы хотите за $RESTRICTED_PATH.
Или имейте уже сборный bashrc файл:
if [ -f /etc/bashrc ]; then
source /etc/bashrc
fi
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
PS1="foo:"
PATH=$RESTRICTED_PATH
И затем звоните с /bin/bash -rcfile ~/.bashrc.appsubshell -i
sh
команда, таким образом, это было лучшим решением безусловно.
– Dave
08.05.2015, 19:13
Согласитесь с SiegeX (кто избил меня к нему :))
Объяснить поведение:
Bash только запустится в интерактивном режиме, если его станд. в и будет нормальными терминалами. Это не имеет место при передаче по каналу в той начальной команде.
Можно использовать -c
опция обеспечить команды, но это также устраняет интерактивный режим.
Если Вы действительно хотите сохранить пользовательское дистанционное управление, просто добавьте некоторые операторы теста/источника в строке rcfile к источнику ~/.bashrc
и /etc/bashrc
если файлы существуют.
После того, чтобы читать эту страницу вот то, как я закончил тем, что делал его.
В .bashrc
:
# use prompt postfix
if [[ -n "$PROMPT_POSTFIX" ]]; then
PS1="${PS1}${PROMPT_POSTFIX}"
fi
Затем в сценарии я выполняю интерактивную оболочку от:
env PROMPT_POSTFIX="(whatever) " bash -i
Проблема с использованием --norc
это, это не втягивает Ваш .bashrc
файл, таким образом, Ваша интерактивная подоболочка не будет иметь вещей, которые Вы привыкли использовать в Bash, как Ваши команды истории, и т.д. Таким образом, можно установить PROMPT_POSTFIX
каждый раз, когда Вы называете Bash, и он будет прибавляться к подсказке.
Если Вы все еще хотите ~/.bashrc
быть считанным и принятие ~/.bashrc
не устанавливает $PROMPT_COMMAND
, Вы могли использовать этот прием:
PROMPT_COMMAND='PS1="foo: ";unset PROMPT_COMMAND' bash
Я запускаю подоболочку из скрипта, поэтому я не могу просто сохранить текущую среду, но я хочу, чтобы пользователь все равно настроил свою среду.
Я не хочу требовать от пользователя bashrc того, что я не могу контролировать.
Так что я сделал источник их bashrc, выбросил PROMPT_COMMAND
, если он существует, а затем установил PS1
.
bash --rcfile <(echo ". ~/.bashrc; unset PROMPT_COMMAND; PS1='foo shell > '") -i